{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# End-to-End Automated Learning to Rank\n",
    "\n",
    "This notebook contains every step from Chapters 10 and 11, to give you a sandbox to explore tuning a fully automated LTR system."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import pandas \n",
    "\n",
    "import requests\n",
    "import sys\n",
    "sys.path.append('../..')\n",
    "from aips import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load every session we have data for\n",
    "\n",
    "load every session we have data for as the raw session clickstream data (what was returned, clicked, and not clicked)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sess_id</th>\n",
       "      <th>query</th>\n",
       "      <th>rank</th>\n",
       "      <th>doc_id</th>\n",
       "      <th>clicked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>transformers dark of the moon</td>\n",
       "      <td>0.0</td>\n",
       "      <td>47875842328</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>transformers dark of the moon</td>\n",
       "      <td>1.0</td>\n",
       "      <td>24543701538</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>transformers dark of the moon</td>\n",
       "      <td>2.0</td>\n",
       "      <td>25192107191</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>transformers dark of the moon</td>\n",
       "      <td>3.0</td>\n",
       "      <td>47875841420</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>transformers dark of the moon</td>\n",
       "      <td>4.0</td>\n",
       "      <td>786936817218</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149995</th>\n",
       "      <td>60001</td>\n",
       "      <td>bluray</td>\n",
       "      <td>25.0</td>\n",
       "      <td>23942973416</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149996</th>\n",
       "      <td>60001</td>\n",
       "      <td>bluray</td>\n",
       "      <td>26.0</td>\n",
       "      <td>25192107191</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149997</th>\n",
       "      <td>60001</td>\n",
       "      <td>bluray</td>\n",
       "      <td>27.0</td>\n",
       "      <td>27242809710</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149998</th>\n",
       "      <td>60001</td>\n",
       "      <td>bluray</td>\n",
       "      <td>28.0</td>\n",
       "      <td>600603132872</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149999</th>\n",
       "      <td>60001</td>\n",
       "      <td>bluray</td>\n",
       "      <td>29.0</td>\n",
       "      <td>600603141003</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1775000 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        sess_id                          query  rank        doc_id  clicked\n",
       "0             2  transformers dark of the moon   0.0   47875842328    False\n",
       "1             2  transformers dark of the moon   1.0   24543701538     True\n",
       "2             2  transformers dark of the moon   2.0   25192107191    False\n",
       "3             2  transformers dark of the moon   3.0   47875841420    False\n",
       "4             2  transformers dark of the moon   4.0  786936817218    False\n",
       "...         ...                            ...   ...           ...      ...\n",
       "149995    60001                         bluray  25.0   23942973416    False\n",
       "149996    60001                         bluray  26.0   25192107191    False\n",
       "149997    60001                         bluray  27.0   27242809710    False\n",
       "149998    60001                         bluray  28.0  600603132872    False\n",
       "149999    60001                         bluray  29.0  600603141003    False\n",
       "\n",
       "[1775000 rows x 5 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def all_sessions():\n",
    "    import glob\n",
    "    sessions = pandas.concat([pandas.read_csv(f, compression='gzip')\n",
    "                          for f in glob.glob('data/*_sessions.gz')])\n",
    "    return sessions.rename(columns={'clicked_doc_id': 'doc_id'})\n",
    "    \n",
    "sessions = all_sessions()\n",
    "sessions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## SDBN Judgments using Beta Distribution\n",
    "\n",
    "We have about a dozen queries where we've simulated the click stream. Here we compute the SDBN judgments, using a beta distribution, on each of these queries. The code in `generate_training_data` just repeats what we did in this section of the book, just for every query we have data for. \n",
    "\n",
    "We then convert these to the `Judgments` object we use in Chapter 10\n",
    "\n",
    "### What you should play with\n",
    "\n",
    "Explore the strength of the prior (`PRIOR_WEIGHT`) as well as the specific default relevance grade, `PRIOR_GRADE`. A stronger `PRIOR_WEIGHT` won't budge much from `PRIOR_WEIGHT`.\n",
    "\n",
    "If you're feeling more advanced, you can explore different methods of computing the relevance judgments from these sessions, by replacing `sessions_to_sdbn` with your own formula for translating clicks to judgments."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Judgment(grade=4,qid=0,keywords=dryer,doc_id=856751002097,features=[],weight=1),\n",
       " Judgment(grade=4,qid=0,keywords=dryer,doc_id=48231011396,features=[],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=84691226727,features=[],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=74108007469,features=[],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=12505525766,features=[],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=36725578241,features=[],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=48231011402,features=[],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=12505527456,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=74108096487,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=36725561977,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=84691226703,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=665331101927,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=783722274422,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=14381196320,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=77283045400,features=[],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=74108056764,features=[],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=883049066905,features=[],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=12505451713,features=[],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=36172950027,features=[],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=883929085118,features=[],weight=1),\n",
       " Judgment(grade=9,qid=1,keywords=bluray,doc_id=600603141003,features=[],weight=1),\n",
       " Judgment(grade=5,qid=1,keywords=bluray,doc_id=27242813908,features=[],weight=1),\n",
       " Judgment(grade=5,qid=1,keywords=bluray,doc_id=600603132872,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608894,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=25192107191,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608511,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=605342041546,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=883929140855,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=786936817232,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=22265004517,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=719192580374,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=24543742180,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608443,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=23942973416,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725617605,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=27242815414,features=[],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=826663129342,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=58231306590,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=27242809758,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=36725608436,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=36725617506,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=711719983156,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=186156000290,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=58231300826,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=23942972389,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=786936805017,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=25192073007,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=885170038875,features=[],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=711719804604,features=[],weight=1),\n",
       " Judgment(grade=0,qid=1,keywords=bluray,doc_id=27242809710,features=[],weight=1),\n",
       " Judgment(grade=8,qid=2,keywords=blue ray,doc_id=27242815414,features=[],weight=1),\n",
       " Judgment(grade=5,qid=2,keywords=blue ray,doc_id=600603132872,features=[],weight=1),\n",
       " Judgment(grade=4,qid=2,keywords=blue ray,doc_id=827396513927,features=[],weight=1),\n",
       " Judgment(grade=4,qid=2,keywords=blue ray,doc_id=600603141003,features=[],weight=1),\n",
       " Judgment(grade=3,qid=2,keywords=blue ray,doc_id=885170033412,features=[],weight=1),\n",
       " Judgment(grade=3,qid=2,keywords=blue ray,doc_id=883929140855,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=24543672067,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=813774010904,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725617605,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=786936817232,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725608443,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=719192580374,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=25192073007,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=75993997675,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725608894,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=786936817218,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=711719983156,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=22265052211,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=883929197965,features=[],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=25192107191,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=22265004517,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=58231306590,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=58231300826,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=23942972389,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=826663129342,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=885170038875,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=786936805017,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=711719804604,features=[],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=36725608511,features=[],weight=1),\n",
       " Judgment(grade=0,qid=2,keywords=blue ray,doc_id=27242809710,features=[],weight=1),\n",
       " Judgment(grade=6,qid=3,keywords=headphones,doc_id=803238004525,features=[],weight=1),\n",
       " Judgment(grade=6,qid=3,keywords=headphones,doc_id=27242799127,features=[],weight=1),\n",
       " Judgment(grade=3,qid=3,keywords=headphones,doc_id=709483027855,features=[],weight=1),\n",
       " Judgment(grade=3,qid=3,keywords=headphones,doc_id=615104173552,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=27242740389,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=878615035287,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=848447000005,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=46838046100,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=673796100317,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=17817553476,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=885909412006,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=723755894396,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=21331350091,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=731855020454,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=46838044106,features=[],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=615104194557,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=600603124570,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=50644614705,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242708242,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=743878021295,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=848447000135,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=17817542371,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=878615035294,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242745100,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242798236,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=709483027848,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=878615025226,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242807785,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=848447000081,features=[],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242801585,features=[],weight=1),\n",
       " Judgment(grade=4,qid=4,keywords=ipad,doc_id=885909457588,features=[],weight=1),\n",
       " Judgment(grade=4,qid=4,keywords=ipad,doc_id=885909472376,features=[],weight=1),\n",
       " Judgment(grade=3,qid=4,keywords=ipad,doc_id=821793013776,features=[],weight=1),\n",
       " Judgment(grade=3,qid=4,keywords=ipad,doc_id=635753493559,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=722868830062,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909471812,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=92636260712,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=886111271283,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457632,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909393404,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457601,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=716829772249,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457595,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=600603132827,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=27242798236,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=884962753071,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=886111287055,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=635753490879,features=[],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=843404073153,features=[],weight=1),\n",
       " Judgment(grade=1,qid=4,keywords=ipad,doc_id=610839379408,features=[],weight=1),\n",
       " Judgment(grade=4,qid=5,keywords=iphone,doc_id=885909510344,features=[],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=600603140631,features=[],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=885909538041,features=[],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=705105070803,features=[],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=660715215252,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=56035362545,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=883929153121,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=884720011757,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=722868816622,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=885909538058,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=885909528912,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=636926048583,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=722868787595,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=600603125065,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=685387305636,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=899794006745,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=600603132827,features=[],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=97855069917,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909528905,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909420445,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=600603133237,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909420438,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=843404064434,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909538027,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909459834,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909343874,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909397723,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909394494,features=[],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909459858,features=[],weight=1),\n",
       " Judgment(grade=0,qid=5,keywords=iphone,doc_id=885909538034,features=[],weight=1),\n",
       " Judgment(grade=5,qid=6,keywords=kindle,doc_id=814916011896,features=[],weight=1),\n",
       " Judgment(grade=4,qid=6,keywords=kindle,doc_id=9781400532711,features=[],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014361,features=[],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916011872,features=[],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014590,features=[],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014385,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580017906,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010202,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010240,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=9781400532650,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580018514,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010288,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580018491,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010219,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=92636257521,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916014606,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580015261,features=[],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010233,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580018361,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=843404077182,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015247,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=885909457595,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=716829772249,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015933,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015698,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015155,features=[],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015223,features=[],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580015636,features=[],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580015292,features=[],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580016107,features=[],weight=1),\n",
       " Judgment(grade=6,qid=7,keywords=lcd tv,doc_id=36725236271,features=[],weight=1),\n",
       " Judgment(grade=5,qid=7,keywords=lcd tv,doc_id=883393003458,features=[],weight=1),\n",
       " Judgment(grade=4,qid=7,keywords=lcd tv,doc_id=36725234789,features=[],weight=1),\n",
       " Judgment(grade=3,qid=7,keywords=lcd tv,doc_id=882777064009,features=[],weight=1),\n",
       " Judgment(grade=3,qid=7,keywords=lcd tv,doc_id=22265004289,features=[],weight=1),\n",
       " Judgment(grade=2,qid=7,keywords=lcd tv,doc_id=27242817197,features=[],weight=1),\n",
       " Judgment(grade=2,qid=7,keywords=lcd tv,doc_id=729507810218,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=885170042704,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=812491010310,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=812491010334,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912072969,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=74000373105,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=884483335329,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912068467,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912068474,features=[],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=97278016000,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=696211503197,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=605342041546,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=882777064207,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=885170042667,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=13803112610,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=729507813059,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=22265004258,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=719192579996,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=600603139758,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=36725235564,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=22265004302,features=[],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=723755834491,features=[],weight=1),\n",
       " Judgment(grade=5,qid=8,keywords=macbook,doc_id=885909436705,features=[],weight=1),\n",
       " Judgment(grade=4,qid=8,keywords=macbook,doc_id=885909464043,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909431618,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909454396,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909432257,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909437023,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909436002,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909464036,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909463626,features=[],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909398577,features=[],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909377794,features=[],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909282883,features=[],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909398584,features=[],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=4712052310841,features=[],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=885909262236,features=[],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=94922876065,features=[],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=13803133929,features=[],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=27242827790,features=[],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=886112432140,features=[],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=650450759814,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=13803123470,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=36725729872,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=36725617421,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=28287033924,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=99802970796,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=27242836228,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=600603123061,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=400027951918,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=73502031827,features=[],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=29521842944,features=[],weight=1),\n",
       " Judgment(grade=7,qid=9,keywords=nook,doc_id=600603135088,features=[],weight=1),\n",
       " Judgment(grade=5,qid=9,keywords=nook,doc_id=9781400532711,features=[],weight=1),\n",
       " Judgment(grade=4,qid=9,keywords=nook,doc_id=9781400532650,features=[],weight=1),\n",
       " Judgment(grade=3,qid=9,keywords=nook,doc_id=813580016961,features=[],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9780594033899,features=[],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=814916014606,features=[],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9781400532629,features=[],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9780594033929,features=[],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=716829772249,features=[],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9781616874452,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017937,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9780594033912,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=660543005827,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916011896,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916011872,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9781400532667,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9780594033936,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9781616826055,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916010240,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=600603135101,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580016824,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=36725234642,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=716829782446,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=843404077427,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=92636257521,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580013571,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017043,features=[],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017074,features=[],weight=1),\n",
       " Judgment(grade=0,qid=9,keywords=nook,doc_id=813580017067,features=[],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=50644555190,features=[],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719840,features=[],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97361427546,features=[],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719741,features=[],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=13964123296,features=[],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719642,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=30206696622,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97363485049,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=738572128920,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97360717648,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97361166247,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=13964123302,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=5051368213637,features=[],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=29757201560,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=46034897179,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=883929139446,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=742725280410,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=635753490541,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97361301747,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=31398121381,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=27242829619,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97360743548,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97360719147,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=791149900183,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=52824803121,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97361311944,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=12505226021,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=50694439860,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=36725578340,features=[],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=36725235564,features=[],weight=1),\n",
       " Judgment(grade=4,qid=11,keywords=star wars,doc_id=23272342630,features=[],weight=1),\n",
       " Judgment(grade=4,qid=11,keywords=star wars,doc_id=24543742180,features=[],weight=1),\n",
       " Judgment(grade=3,qid=11,keywords=star wars,doc_id=24543742098,features=[],weight=1),\n",
       " Judgment(grade=3,qid=11,keywords=star wars,doc_id=23272341381,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=885370332889,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=886973561621,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=14633169522,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543781875,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=708431390614,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=884116069973,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=30206742121,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543742074,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=883929154012,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=23272342654,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543560067,features=[],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=883929200887,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=14633169546,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543023920,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543263739,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=400032015667,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=886971404722,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=23272332389,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543559856,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=827969295021,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=738572121921,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=883929094561,features=[],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=827969295120,features=[],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=24543203094,features=[],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=827969422021,features=[],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=97361455044,features=[],weight=1),\n",
       " Judgment(grade=6,qid=12,keywords=transformers dark of the moon,doc_id=97360810042,features=[],weight=1),\n",
       " Judgment(grade=5,qid=12,keywords=transformers dark of the moon,doc_id=400192926087,features=[],weight=1),\n",
       " Judgment(grade=4,qid=12,keywords=transformers dark of the moon,doc_id=97363560449,features=[],weight=1),\n",
       " Judgment(grade=3,qid=12,keywords=transformers dark of the moon,doc_id=97363532149,features=[],weight=1),\n",
       " Judgment(grade=3,qid=12,keywords=transformers dark of the moon,doc_id=93624956037,features=[],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=47875842328,features=[],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=47875841420,features=[],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=25192107191,features=[],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=786936817218,features=[],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=36725235564,features=[],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=24543701538,features=[],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875841369,features=[],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875841406,features=[],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=24543750949,features=[],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875842335,features=[],weight=1)]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PRIOR_GRADE=0.2\n",
    "PRIOR_WEIGHT=10\n",
    "\n",
    "from ltr.judgments import Judgment\n",
    "\n",
    "# Create a judgment list with our queries\n",
    "def sessions_to_sdbn(query):\n",
    "    \"\"\" Compute SDBN of the provided query as a dataframe.\n",
    "        Where we left off at end of 'overcoming confidence bias' \n",
    "        \"\"\"\n",
    "    sdbn_sessions = sessions[sessions['query'] == query].copy().set_index('sess_id')\n",
    "\n",
    "    last_click_per_session = sdbn_sessions.groupby(['clicked', 'sess_id'])['rank'].max()[True]\n",
    "\n",
    "    sdbn_sessions['last_click_rank'] = last_click_per_session\n",
    "    sdbn_sessions['examined'] = sdbn_sessions['rank'] <= sdbn_sessions['last_click_rank']\n",
    "\n",
    "    sdbn = sdbn_sessions[sdbn_sessions['examined']].groupby('doc_id')[['clicked', 'examined']].sum()\n",
    "    sdbn['grade'] = sdbn['clicked'] / sdbn['examined']\n",
    "\n",
    "    sdbn = sdbn.sort_values('grade', ascending=False)\n",
    "\n",
    "    sdbn['prior_a'] = PRIOR_GRADE*PRIOR_WEIGHT\n",
    "    sdbn['prior_b'] = (1-PRIOR_GRADE)*PRIOR_WEIGHT\n",
    "\n",
    "    sdbn['posterior_a'] = sdbn['prior_a'] +  sdbn['clicked']\n",
    "    sdbn['posterior_b'] = sdbn['prior_b'] + (sdbn['examined'] - sdbn['clicked'])\n",
    "\n",
    "    sdbn['beta_grade'] = sdbn['posterior_a'] / (sdbn['posterior_a'] + sdbn['posterior_b'])\n",
    "\n",
    "    sdbn.sort_values('beta_grade', ascending=False)\n",
    "    return sdbn\n",
    "\n",
    "\n",
    "def sdbn_to_judgments(sdbn, query, qid):\n",
    "    judgments = []\n",
    "    for row_dict in sdbn.reset_index().to_dict(orient=\"records\"):\n",
    "        # Round grade to 10ths, Map 0.3 -> 3, etc\n",
    "        grade = round(row_dict['beta_grade'], 1) * 10\n",
    "        judgments.append(Judgment(doc_id=row_dict['doc_id'],\n",
    "                                  keywords=query,\n",
    "                                  qid=qid,\n",
    "                                  grade=int(grade))\n",
    "                        )\n",
    "    return judgments\n",
    "\n",
    "\n",
    "simulated_queries = ['dryer', 'bluray', 'blue ray', 'headphones', 'ipad', 'iphone',\n",
    "                     'kindle', 'lcd tv', 'macbook', 'nook', 'star trek', 'star wars',\n",
    "                     'transformers dark of the moon']\n",
    "\n",
    "\n",
    "\n",
    "judgments = []\n",
    "for qid, query in enumerate(simulated_queries):\n",
    "    sdbn = sessions_to_sdbn(query)\n",
    "    judgments.extend(sdbn_to_judgments(sdbn, query, qid))\n",
    "    \n",
    "    \n",
    "judgments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from ltr.judgments import judgments_to_file\n",
    "\n",
    "judgments_to_file(open('data/product_judgments.txt', 'w'), judgments)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>clicked</th>\n",
       "      <th>examined</th>\n",
       "      <th>grade</th>\n",
       "      <th>prior_a</th>\n",
       "      <th>prior_b</th>\n",
       "      <th>posterior_a</th>\n",
       "      <th>posterior_b</th>\n",
       "      <th>beta_grade</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>doc_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>856751002097</th>\n",
       "      <td>133</td>\n",
       "      <td>323</td>\n",
       "      <td>0.411765</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>135.0</td>\n",
       "      <td>198.0</td>\n",
       "      <td>0.405405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48231011396</th>\n",
       "      <td>166</td>\n",
       "      <td>423</td>\n",
       "      <td>0.392435</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>168.0</td>\n",
       "      <td>265.0</td>\n",
       "      <td>0.387991</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84691226727</th>\n",
       "      <td>804</td>\n",
       "      <td>2541</td>\n",
       "      <td>0.316411</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>806.0</td>\n",
       "      <td>1745.0</td>\n",
       "      <td>0.315955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74108007469</th>\n",
       "      <td>208</td>\n",
       "      <td>708</td>\n",
       "      <td>0.293785</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>210.0</td>\n",
       "      <td>508.0</td>\n",
       "      <td>0.292479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12505525766</th>\n",
       "      <td>268</td>\n",
       "      <td>974</td>\n",
       "      <td>0.275154</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>270.0</td>\n",
       "      <td>714.0</td>\n",
       "      <td>0.274390</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36725578241</th>\n",
       "      <td>130</td>\n",
       "      <td>477</td>\n",
       "      <td>0.272537</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>132.0</td>\n",
       "      <td>355.0</td>\n",
       "      <td>0.271047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48231011402</th>\n",
       "      <td>213</td>\n",
       "      <td>818</td>\n",
       "      <td>0.260391</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>215.0</td>\n",
       "      <td>613.0</td>\n",
       "      <td>0.259662</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12505527456</th>\n",
       "      <td>110</td>\n",
       "      <td>428</td>\n",
       "      <td>0.257009</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>112.0</td>\n",
       "      <td>326.0</td>\n",
       "      <td>0.255708</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74108096487</th>\n",
       "      <td>235</td>\n",
       "      <td>1097</td>\n",
       "      <td>0.214221</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>237.0</td>\n",
       "      <td>870.0</td>\n",
       "      <td>0.214092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36725561977</th>\n",
       "      <td>119</td>\n",
       "      <td>572</td>\n",
       "      <td>0.208042</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>121.0</td>\n",
       "      <td>461.0</td>\n",
       "      <td>0.207904</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84691226703</th>\n",
       "      <td>408</td>\n",
       "      <td>2015</td>\n",
       "      <td>0.202481</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>1615.0</td>\n",
       "      <td>0.202469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>665331101927</th>\n",
       "      <td>270</td>\n",
       "      <td>1347</td>\n",
       "      <td>0.200445</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>272.0</td>\n",
       "      <td>1085.0</td>\n",
       "      <td>0.200442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>783722274422</th>\n",
       "      <td>288</td>\n",
       "      <td>1498</td>\n",
       "      <td>0.192256</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>290.0</td>\n",
       "      <td>1218.0</td>\n",
       "      <td>0.192308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14381196320</th>\n",
       "      <td>217</td>\n",
       "      <td>1202</td>\n",
       "      <td>0.180532</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>219.0</td>\n",
       "      <td>993.0</td>\n",
       "      <td>0.180693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77283045400</th>\n",
       "      <td>276</td>\n",
       "      <td>1625</td>\n",
       "      <td>0.169846</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>278.0</td>\n",
       "      <td>1357.0</td>\n",
       "      <td>0.170031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74108056764</th>\n",
       "      <td>273</td>\n",
       "      <td>1791</td>\n",
       "      <td>0.152429</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>275.0</td>\n",
       "      <td>1526.0</td>\n",
       "      <td>0.152693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>883049066905</th>\n",
       "      <td>286</td>\n",
       "      <td>2138</td>\n",
       "      <td>0.133770</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>288.0</td>\n",
       "      <td>1860.0</td>\n",
       "      <td>0.134078</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12505451713</th>\n",
       "      <td>355</td>\n",
       "      <td>2707</td>\n",
       "      <td>0.131141</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>357.0</td>\n",
       "      <td>2360.0</td>\n",
       "      <td>0.131395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36172950027</th>\n",
       "      <td>97</td>\n",
       "      <td>971</td>\n",
       "      <td>0.099897</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>99.0</td>\n",
       "      <td>882.0</td>\n",
       "      <td>0.100917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>883929085118</th>\n",
       "      <td>44</td>\n",
       "      <td>578</td>\n",
       "      <td>0.076125</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>542.0</td>\n",
       "      <td>0.078231</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              clicked  examined     grade  prior_a  prior_b  posterior_a  \\\n",
       "doc_id                                                                     \n",
       "856751002097      133       323  0.411765      2.0      8.0        135.0   \n",
       "48231011396       166       423  0.392435      2.0      8.0        168.0   \n",
       "84691226727       804      2541  0.316411      2.0      8.0        806.0   \n",
       "74108007469       208       708  0.293785      2.0      8.0        210.0   \n",
       "12505525766       268       974  0.275154      2.0      8.0        270.0   \n",
       "36725578241       130       477  0.272537      2.0      8.0        132.0   \n",
       "48231011402       213       818  0.260391      2.0      8.0        215.0   \n",
       "12505527456       110       428  0.257009      2.0      8.0        112.0   \n",
       "74108096487       235      1097  0.214221      2.0      8.0        237.0   \n",
       "36725561977       119       572  0.208042      2.0      8.0        121.0   \n",
       "84691226703       408      2015  0.202481      2.0      8.0        410.0   \n",
       "665331101927      270      1347  0.200445      2.0      8.0        272.0   \n",
       "783722274422      288      1498  0.192256      2.0      8.0        290.0   \n",
       "14381196320       217      1202  0.180532      2.0      8.0        219.0   \n",
       "77283045400       276      1625  0.169846      2.0      8.0        278.0   \n",
       "74108056764       273      1791  0.152429      2.0      8.0        275.0   \n",
       "883049066905      286      2138  0.133770      2.0      8.0        288.0   \n",
       "12505451713       355      2707  0.131141      2.0      8.0        357.0   \n",
       "36172950027        97       971  0.099897      2.0      8.0         99.0   \n",
       "883929085118       44       578  0.076125      2.0      8.0         46.0   \n",
       "\n",
       "              posterior_b  beta_grade  \n",
       "doc_id                                 \n",
       "856751002097        198.0    0.405405  \n",
       "48231011396         265.0    0.387991  \n",
       "84691226727        1745.0    0.315955  \n",
       "74108007469         508.0    0.292479  \n",
       "12505525766         714.0    0.274390  \n",
       "36725578241         355.0    0.271047  \n",
       "48231011402         613.0    0.259662  \n",
       "12505527456         326.0    0.255708  \n",
       "74108096487         870.0    0.214092  \n",
       "36725561977         461.0    0.207904  \n",
       "84691226703        1615.0    0.202469  \n",
       "665331101927       1085.0    0.200442  \n",
       "783722274422       1218.0    0.192308  \n",
       "14381196320         993.0    0.180693  \n",
       "77283045400        1357.0    0.170031  \n",
       "74108056764        1526.0    0.152693  \n",
       "883049066905       1860.0    0.134078  \n",
       "12505451713        2360.0    0.131395  \n",
       "36172950027         882.0    0.100917  \n",
       "883929085118        542.0    0.078231  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sessions_to_sdbn('dryer')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Index Retrotech\n",
    "\n",
    "Index retrotech data into Solr. \n",
    "\n",
    "### What you should play with:\n",
    "\n",
    "- What new fields besides these would be useful to use as features?\n",
    "- What work could you do to these fields to help with relevance?\n",
    "\n",
    "**Note - You can safely ignore any errors deleting / readding the LTR query parser**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wiping 'products' collection\n",
      "[('action', 'CREATE'), ('name', 'products'), ('numShards', 1), ('replicationFactor', 1)]\n",
      "Creating 'products' collection\n",
      "Status: Success\n",
      "Del/Adding LTR QParser for products collection\n",
      "<Response [400]>\n",
      "Status: Failure; Response:[ {'responseHeader': {'status': 400, 'QTime': 1}, 'errorMessages': [\"error processing commands, errors: [{delete-queryparser=ltr, errorMessages=[NO such queryParser 'ltr' ]}], \\n\"], 'WARNING': 'This response format is experimental.  It is likely to change in the future.', 'error': {'metadata': ['error-class', 'org.apache.solr.api.ApiBag$ExceptionWithErrObject', 'root-error-class', 'org.apache.solr.api.ApiBag$ExceptionWithErrObject'], 'details': [{'delete-queryparser': 'ltr', 'errorMessages': [\"NO such queryParser 'ltr' \"]}], 'msg': \"error processing commands, errors: [{delete-queryparser=ltr, errorMessages=[NO such queryParser 'ltr' ]}], \", 'code': 400}} ]\n",
      "Status: Success\n",
      "Adding LTR Doc Transformer for products collection\n",
      "Status: Failure; Response:[ {'responseHeader': {'status': 400, 'QTime': 1}, 'errorMessages': [\"error processing commands, errors: [{delete-transformer=features, errorMessages=[NO such transformer 'features' ]}], \\n\"], 'WARNING': 'This response format is experimental.  It is likely to change in the future.', 'error': {'metadata': ['error-class', 'org.apache.solr.api.ApiBag$ExceptionWithErrObject', 'root-error-class', 'org.apache.solr.api.ApiBag$ExceptionWithErrObject'], 'details': [{'delete-transformer': 'features', 'errorMessages': [\"NO such transformer 'features' \"]}], 'msg': \"error processing commands, errors: [{delete-transformer=features, errorMessages=[NO such transformer 'features' ]}], \", 'code': 400}} ]\n",
      "Status: Success\n",
      "Adding 'upc' field to collection\n",
      "Status: Success\n",
      "Adding 'name' field to collection\n",
      "Status: Success\n",
      "Adding 'long_description' field to collection\n",
      "Status: Success\n",
      "Adding 'short_description' field to collection\n",
      "Status: Success\n",
      "Adding 'manufacturer' field to collection\n",
      "Status: Success\n",
      "Loading Products...\n",
      "Products Schema: \n",
      "root\n",
      " |-- upc: long (nullable = true)\n",
      " |-- name: string (nullable = true)\n",
      " |-- manufacturer: string (nullable = true)\n",
      " |-- short_description: string (nullable = true)\n",
      " |-- long_description: string (nullable = true)\n",
      "\n",
      "Status: Success\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "sys.path.append('../..')\n",
    "from aips import *\n",
    "import os\n",
    "from IPython.display import display,HTML\n",
    "from pyspark.sql import SparkSession\n",
    "spark = SparkSession.builder.appName(\"aips-ch11-getting-started-retrotech\").getOrCreate()\n",
    "\n",
    "#Create Products Collection\n",
    "products_collection=\"products\"\n",
    "create_collection(products_collection)\n",
    "get_ltr_engine(products_collection).enable_ltr()\n",
    "\n",
    "#Modify Schema to make some fields explicitly searchable by keyword\n",
    "upsert_text_field(products_collection, \"upc\")\n",
    "upsert_text_field(products_collection, \"name\")\n",
    "upsert_text_field(products_collection, \"long_description\")\n",
    "upsert_text_field(products_collection, \"short_description\")\n",
    "upsert_text_field(products_collection, \"manufacturer\")\n",
    "\n",
    "print(\"Loading Products...\")\n",
    "csvFile = \"data/retrotech/products.csv\"\n",
    "product_update_opts={\"zkhost\": \"aips-zk\", \"collection\": products_collection, \n",
    "                     \"gen_uniq_key\": \"true\", \"commit_within\": \"5000\"}\n",
    "csvDF = spark.read.csv(csvFile, header=True, inferSchema=True)\n",
    "csvDF.write.format(\"solr\").options(**product_update_opts).mode(\"overwrite\").save()\n",
    "print(\"Products Schema: \")\n",
    "csvDF.printSchema()\n",
    "print(\"Status: Success\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create a simple feature set\n",
    "\n",
    "Here's a simple feature set. The ranking function can _only be as good as the training data and features_.\n",
    "\n",
    "### What you should play with:\n",
    "\n",
    "Experiment with different features to see what builds the most robust model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(<Response [200]>,\n",
       " '{\\n  \"responseHeader\":{\\n    \"status\":0,\\n    \"QTime\":2}}\\n')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "resp = requests.delete(f\"{SOLR_URL}/{products_collection}/schema/feature-store/test\")\n",
    "\n",
    "import requests\n",
    "\n",
    "feature_set = [\n",
    "    {\n",
    "      \"name\" : \"name_bm25\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : { #q=title:({$keywords})\n",
    "        \"q\" : \"name:(${keywords})\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\" : \"name_constant\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : { #q=title:({$keywords})\n",
    "        \"q\" : \"name:(${keywords})^=1\"\n",
    "      }\n",
    "    }\n",
    "]\n",
    "\n",
    "# Some extra features to explore\n",
    "\"\"\"\n",
    "    {\n",
    "      \"name\" : \"longDesciption_bm25\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : {\n",
    "        \"q\" : \"long_description:(${keywords})\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\" : \"shortDesciption_bm25\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : {\n",
    "        \"q\" : \"short_description:(${keywords})\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\" : \"short_description_constant\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : { #q=title:({$keywords})\n",
    "        \"q\" : \"short_description:(${keywords})^=1\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\" : \"long_description_constant\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : { #q=title:({$keywords})\n",
    "        \"q\" : \"long_description:(${keywords})^=1\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\" : \"longDesciptionPhrase_bm25\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : {\n",
    "        \"q\" : \"long_description:\\\"${keywords}\\\"\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\" : \"shortDesciptionPhrase_bm25\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\" : \"org.apache.solr.ltr.feature.SolrFeature\",\n",
    "      \"params\" : {\n",
    "        \"q\" : \"short_description:\\\"${keywords}\\\"\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\":  \"nameLength\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\": \"org.apache.solr.ltr.feature.FieldLengthFeature\",\n",
    "      \"params\": {\n",
    "          \"field\": \"name\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\":  \"short_descriptionLength\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\": \"org.apache.solr.ltr.feature.FieldLengthFeature\",\n",
    "      \"params\": {\n",
    "          \"field\": \"short_description\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\":  \"long_descriptionLength\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\": \"org.apache.solr.ltr.feature.FieldLengthFeature\",\n",
    "      \"params\": {\n",
    "          \"field\": \"long_description\"\n",
    "      }\n",
    "    },\n",
    "    {\n",
    "      \"name\":  \"manufacturerLength\",\n",
    "      \"store\": \"test\",\n",
    "      \"class\": \"org.apache.solr.ltr.feature.FieldLengthFeature\",\n",
    "      \"params\": {\n",
    "          \"field\": \"long_description\"\n",
    "      }\n",
    "    }\n",
    "\"\"\"\n",
    "\n",
    "resp = requests.post(f\"{SOLR_URL}/{products_collection}/schema/feature-store\",\n",
    "                     json=feature_set)\n",
    "resp, resp.text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'products'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "resp = requests.get(f\"{SOLR_URL}/solr/{products_collection}/schema/feature-store/test\")\n",
    "products_collection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# qid:0: dryer*1\n",
      "# qid:1: bluray*1\n",
      "# qid:2: blue ray*1\n",
      "# qid:3: headphones*1\n",
      "# qid:4: ipad*1\n",
      "# qid:5: iphone*1\n",
      "# qid:6: kindle*1\n",
      "# qid:7: lcd tv*1\n",
      "# qid:8: macbook*1\n",
      "# qid:9: nook*1\n",
      "# qid:10: star trek*1\n",
      "# qid:11: star wars*1\n",
      "# qid:12: transformers dark of the moon*1\n",
      "\n",
      "4\tqid:0\t # 856751002097\tdryer\n",
      "4\tqid:0\t # 48231011396\tdryer\n",
      "3\tqid:0\t # 84691226727\tdryer\n",
      "3\tqid:0\t # 74108007469\tdryer\n",
      "3\tqid:0\t # 12505525766\tdryer\n",
      "3\tqid:0\t # 36725578241\tdryer\n",
      "3\tqid:0\t # 48231011402\tdryer\n",
      "3\tqid:0\t # 12505527456\tdryer\n",
      "2\tqid:0\t # 74108096487\tdryer\n",
      "2\tqid:0\t # 36725561977\tdryer\n",
      "2\tqid:0\t # 84691226703\tdryer\n",
      "2\tqid:0\t # 665331101927\tdryer\n",
      "2\tqid:0\t # 783722274422\tdryer\n",
      "2\tqid:0\t # 14381196320\tdryer\n",
      "2\tqid:0\t # 77283045400\tdryer\n",
      "2\tqid:0\t # 74108056764\tdryer\n",
      "1\tqid:0\t # 883049066905\tdryer\n",
      "1\tqid:0\t # 12505451713\tdryer\n",
      "1\tqid:0\t # 36172950027\tdryer\n",
      "1\tqid:0\t # 883929085118\tdryer\n",
      "9\tqid:1\t # 600603141003\tbluray\n",
      "5\tqid:1\t # 27242813908\tbluray\n",
      "5\tqid:1\t # 600603132872\tbluray\n",
      "2\tqid:1\t # 36725608894\tbluray\n",
      "2\tqid:1\t # 25192107191\tbluray\n",
      "2\tqid:1\t # 36725608511\tbluray\n",
      "2\tqid:1\t # 605342041546\tbluray\n",
      "2\tqid:1\t # 883929140855\tbluray\n",
      "2\tqid:1\t # 786936817232\tbluray\n",
      "2\tqid:1\t # 22265004517\tbluray\n",
      "2\tqid:1\t # 719192580374\tbluray\n",
      "2\tqid:1\t # 24543742180\tbluray\n",
      "2\tqid:1\t # 36725608443\tbluray\n",
      "2\tqid:1\t # 23942973416\tbluray\n",
      "2\tqid:1\t # 36725617605\tbluray\n",
      "2\tqid:1\t # 27242815414\tbluray\n",
      "2\tqid:1\t # 826663129342\tbluray\n",
      "1\tqid:1\t # 58231306590\tbluray\n",
      "1\tqid:1\t # 27242809758\tbluray\n",
      "1\tqid:1\t # 36725608436\tbluray\n",
      "1\tqid:1\t # 36725617506\tbluray\n",
      "1\tqid:1\t # 711719983156\tbluray\n",
      "1\tqid:1\t # 186156000290\tbluray\n",
      "1\tqid:1\t # 58231300826\tbluray\n",
      "1\tqid:1\t # 23942972389\tbluray\n",
      "1\tqid:1\t # 786936805017\tbluray\n",
      "1\tqid:1\t # 25192073007\tbluray\n",
      "1\tqid:1\t # 885170038875\tbluray\n",
      "1\tqid:1\t # 711719804604\tbluray\n",
      "0\tqid:1\t # 27242809710\tbluray\n",
      "8\tqid:2\t # 27242815414\tblue ray\n",
      "5\tqid:2\t # 600603132872\tblue ray\n",
      "4\tqid:2\t # 827396513927\tblue ray\n",
      "4\tqid:2\t # 600603141003\tblue ray\n",
      "3\tqid:2\t # 885170033412\tblue ray\n",
      "3\tqid:2\t # 883929140855\tblue ray\n",
      "2\tqid:2\t # 24543672067\tblue ray\n",
      "2\tqid:2\t # 813774010904\tblue ray\n",
      "2\tqid:2\t # 36725617605\tblue ray\n",
      "2\tqid:2\t # 786936817232\tblue ray\n",
      "2\tqid:2\t # 36725608443\tblue ray\n",
      "2\tqid:2\t # 719192580374\tblue ray\n",
      "2\tqid:2\t # 25192073007\tblue ray\n",
      "2\tqid:2\t # 75993997675\tblue ray\n",
      "2\tqid:2\t # 36725608894\tblue ray\n",
      "2\tqid:2\t # 786936817218\tblue ray\n",
      "2\tqid:2\t # 711719983156\tblue ray\n",
      "2\tqid:2\t # 22265052211\tblue ray\n",
      "2\tqid:2\t # 883929197965\tblue ray\n",
      "2\tqid:2\t # 25192107191\tblue ray\n",
      "1\tqid:2\t # 22265004517\tblue ray\n",
      "1\tqid:2\t # 58231306590\tblue ray\n",
      "1\tqid:2\t # 58231300826\tblue ray\n",
      "1\tqid:2\t # 23942972389\tblue ray\n",
      "1\tqid:2\t # 826663129342\tblue ray\n",
      "1\tqid:2\t # 885170038875\tblue ray\n",
      "1\tqid:2\t # 786936805017\tblue ray\n",
      "1\tqid:2\t # 711719804604\tblue ray\n",
      "1\tqid:2\t # 36725608511\tblue ray\n",
      "0\tqid:2\t # 27242809710\tblue ray\n",
      "6\tqid:3\t # 803238004525\theadphones\n",
      "6\tqid:3\t # 27242799127\theadphones\n",
      "3\tqid:3\t # 709483027855\theadphones\n",
      "3\tqid:3\t # 615104173552\theadphones\n",
      "2\tqid:3\t # 27242740389\theadphones\n",
      "2\tqid:3\t # 878615035287\theadphones\n",
      "2\tqid:3\t # 848447000005\theadphones\n",
      "2\tqid:3\t # 46838046100\theadphones\n",
      "2\tqid:3\t # 673796100317\theadphones\n",
      "2\tqid:3\t # 17817553476\theadphones\n",
      "2\tqid:3\t # 885909412006\theadphones\n",
      "2\tqid:3\t # 723755894396\theadphones\n",
      "2\tqid:3\t # 21331350091\theadphones\n",
      "2\tqid:3\t # 731855020454\theadphones\n",
      "2\tqid:3\t # 46838044106\theadphones\n",
      "2\tqid:3\t # 615104194557\theadphones\n",
      "1\tqid:3\t # 600603124570\theadphones\n",
      "1\tqid:3\t # 50644614705\theadphones\n",
      "1\tqid:3\t # 27242708242\theadphones\n",
      "1\tqid:3\t # 743878021295\theadphones\n",
      "1\tqid:3\t # 848447000135\theadphones\n",
      "1\tqid:3\t # 17817542371\theadphones\n",
      "1\tqid:3\t # 878615035294\theadphones\n",
      "1\tqid:3\t # 27242745100\theadphones\n",
      "1\tqid:3\t # 27242798236\theadphones\n",
      "1\tqid:3\t # 709483027848\theadphones\n",
      "1\tqid:3\t # 878615025226\theadphones\n",
      "1\tqid:3\t # 27242807785\theadphones\n",
      "1\tqid:3\t # 848447000081\theadphones\n",
      "1\tqid:3\t # 27242801585\theadphones\n",
      "4\tqid:4\t # 885909457588\tipad\n",
      "4\tqid:4\t # 885909472376\tipad\n",
      "3\tqid:4\t # 821793013776\tipad\n",
      "3\tqid:4\t # 635753493559\tipad\n",
      "2\tqid:4\t # 722868830062\tipad\n",
      "2\tqid:4\t # 885909471812\tipad\n",
      "2\tqid:4\t # 92636260712\tipad\n",
      "2\tqid:4\t # 886111271283\tipad\n",
      "2\tqid:4\t # 885909457632\tipad\n",
      "2\tqid:4\t # 885909393404\tipad\n",
      "2\tqid:4\t # 885909457601\tipad\n",
      "2\tqid:4\t # 716829772249\tipad\n",
      "2\tqid:4\t # 885909457595\tipad\n",
      "2\tqid:4\t # 600603132827\tipad\n",
      "2\tqid:4\t # 27242798236\tipad\n",
      "2\tqid:4\t # 884962753071\tipad\n",
      "2\tqid:4\t # 886111287055\tipad\n",
      "2\tqid:4\t # 635753490879\tipad\n",
      "2\tqid:4\t # 843404073153\tipad\n",
      "1\tqid:4\t # 610839379408\tipad\n",
      "4\tqid:5\t # 885909510344\tiphone\n",
      "3\tqid:5\t # 600603140631\tiphone\n",
      "3\tqid:5\t # 885909538041\tiphone\n",
      "3\tqid:5\t # 705105070803\tiphone\n",
      "3\tqid:5\t # 660715215252\tiphone\n",
      "2\tqid:5\t # 56035362545\tiphone\n",
      "2\tqid:5\t # 883929153121\tiphone\n",
      "2\tqid:5\t # 884720011757\tiphone\n",
      "2\tqid:5\t # 722868816622\tiphone\n",
      "2\tqid:5\t # 885909538058\tiphone\n",
      "2\tqid:5\t # 885909528912\tiphone\n",
      "2\tqid:5\t # 636926048583\tiphone\n",
      "2\tqid:5\t # 722868787595\tiphone\n",
      "2\tqid:5\t # 600603125065\tiphone\n",
      "2\tqid:5\t # 685387305636\tiphone\n",
      "2\tqid:5\t # 899794006745\tiphone\n",
      "2\tqid:5\t # 600603132827\tiphone\n",
      "2\tqid:5\t # 97855069917\tiphone\n",
      "1\tqid:5\t # 885909528905\tiphone\n",
      "1\tqid:5\t # 885909420445\tiphone\n",
      "1\tqid:5\t # 600603133237\tiphone\n",
      "1\tqid:5\t # 885909420438\tiphone\n",
      "1\tqid:5\t # 843404064434\tiphone\n",
      "1\tqid:5\t # 885909538027\tiphone\n",
      "1\tqid:5\t # 885909459834\tiphone\n",
      "1\tqid:5\t # 885909343874\tiphone\n",
      "1\tqid:5\t # 885909397723\tiphone\n",
      "1\tqid:5\t # 885909394494\tiphone\n",
      "1\tqid:5\t # 885909459858\tiphone\n",
      "0\tqid:5\t # 885909538034\tiphone\n",
      "5\tqid:6\t # 814916011896\tkindle\n",
      "4\tqid:6\t # 9781400532711\tkindle\n",
      "3\tqid:6\t # 814916014361\tkindle\n",
      "3\tqid:6\t # 814916011872\tkindle\n",
      "3\tqid:6\t # 814916014590\tkindle\n",
      "3\tqid:6\t # 814916014385\tkindle\n",
      "2\tqid:6\t # 813580017906\tkindle\n",
      "2\tqid:6\t # 814916010202\tkindle\n",
      "2\tqid:6\t # 814916010240\tkindle\n",
      "2\tqid:6\t # 9781400532650\tkindle\n",
      "2\tqid:6\t # 813580018514\tkindle\n",
      "2\tqid:6\t # 814916010288\tkindle\n",
      "2\tqid:6\t # 813580018491\tkindle\n",
      "2\tqid:6\t # 814916010219\tkindle\n",
      "2\tqid:6\t # 92636257521\tkindle\n",
      "2\tqid:6\t # 814916014606\tkindle\n",
      "2\tqid:6\t # 813580015261\tkindle\n",
      "2\tqid:6\t # 814916010233\tkindle\n",
      "1\tqid:6\t # 813580018361\tkindle\n",
      "1\tqid:6\t # 843404077182\tkindle\n",
      "1\tqid:6\t # 813580015247\tkindle\n",
      "1\tqid:6\t # 885909457595\tkindle\n",
      "1\tqid:6\t # 716829772249\tkindle\n",
      "1\tqid:6\t # 813580015933\tkindle\n",
      "1\tqid:6\t # 813580015698\tkindle\n",
      "1\tqid:6\t # 813580015155\tkindle\n",
      "1\tqid:6\t # 813580015223\tkindle\n",
      "0\tqid:6\t # 813580015636\tkindle\n",
      "0\tqid:6\t # 813580015292\tkindle\n",
      "0\tqid:6\t # 813580016107\tkindle\n",
      "6\tqid:7\t # 36725236271\tlcd tv\n",
      "5\tqid:7\t # 883393003458\tlcd tv\n",
      "4\tqid:7\t # 36725234789\tlcd tv\n",
      "3\tqid:7\t # 882777064009\tlcd tv\n",
      "3\tqid:7\t # 22265004289\tlcd tv\n",
      "2\tqid:7\t # 27242817197\tlcd tv\n",
      "2\tqid:7\t # 729507810218\tlcd tv\n",
      "1\tqid:7\t # 885170042704\tlcd tv\n",
      "1\tqid:7\t # 812491010310\tlcd tv\n",
      "1\tqid:7\t # 812491010334\tlcd tv\n",
      "1\tqid:7\t # 827912072969\tlcd tv\n",
      "1\tqid:7\t # 74000373105\tlcd tv\n",
      "1\tqid:7\t # 884483335329\tlcd tv\n",
      "1\tqid:7\t # 827912068467\tlcd tv\n",
      "1\tqid:7\t # 827912068474\tlcd tv\n",
      "1\tqid:7\t # 97278016000\tlcd tv\n",
      "0\tqid:7\t # 696211503197\tlcd tv\n",
      "0\tqid:7\t # 605342041546\tlcd tv\n",
      "0\tqid:7\t # 882777064207\tlcd tv\n",
      "0\tqid:7\t # 885170042667\tlcd tv\n",
      "0\tqid:7\t # 13803112610\tlcd tv\n",
      "0\tqid:7\t # 729507813059\tlcd tv\n",
      "0\tqid:7\t # 22265004258\tlcd tv\n",
      "0\tqid:7\t # 719192579996\tlcd tv\n",
      "0\tqid:7\t # 600603139758\tlcd tv\n",
      "0\tqid:7\t # 36725235564\tlcd tv\n",
      "0\tqid:7\t # 22265004302\tlcd tv\n",
      "0\tqid:7\t # 723755834491\tlcd tv\n",
      "5\tqid:8\t # 885909436705\tmacbook\n",
      "4\tqid:8\t # 885909464043\tmacbook\n",
      "3\tqid:8\t # 885909431618\tmacbook\n",
      "3\tqid:8\t # 885909454396\tmacbook\n",
      "3\tqid:8\t # 885909432257\tmacbook\n",
      "3\tqid:8\t # 885909437023\tmacbook\n",
      "3\tqid:8\t # 885909436002\tmacbook\n",
      "3\tqid:8\t # 885909464036\tmacbook\n",
      "3\tqid:8\t # 885909463626\tmacbook\n",
      "3\tqid:8\t # 885909398577\tmacbook\n",
      "2\tqid:8\t # 885909377794\tmacbook\n",
      "2\tqid:8\t # 885909282883\tmacbook\n",
      "2\tqid:8\t # 885909398584\tmacbook\n",
      "1\tqid:8\t # 4712052310841\tmacbook\n",
      "1\tqid:8\t # 885909262236\tmacbook\n",
      "1\tqid:8\t # 94922876065\tmacbook\n",
      "1\tqid:8\t # 13803133929\tmacbook\n",
      "1\tqid:8\t # 27242827790\tmacbook\n",
      "1\tqid:8\t # 886112432140\tmacbook\n",
      "1\tqid:8\t # 650450759814\tmacbook\n",
      "0\tqid:8\t # 13803123470\tmacbook\n",
      "0\tqid:8\t # 36725729872\tmacbook\n",
      "0\tqid:8\t # 36725617421\tmacbook\n",
      "0\tqid:8\t # 28287033924\tmacbook\n",
      "0\tqid:8\t # 99802970796\tmacbook\n",
      "0\tqid:8\t # 27242836228\tmacbook\n",
      "0\tqid:8\t # 600603123061\tmacbook\n",
      "0\tqid:8\t # 400027951918\tmacbook\n",
      "0\tqid:8\t # 73502031827\tmacbook\n",
      "0\tqid:8\t # 29521842944\tmacbook\n",
      "7\tqid:9\t # 600603135088\tnook\n",
      "5\tqid:9\t # 9781400532711\tnook\n",
      "4\tqid:9\t # 9781400532650\tnook\n",
      "3\tqid:9\t # 813580016961\tnook\n",
      "2\tqid:9\t # 9780594033899\tnook\n",
      "2\tqid:9\t # 814916014606\tnook\n",
      "2\tqid:9\t # 9781400532629\tnook\n",
      "2\tqid:9\t # 9780594033929\tnook\n",
      "2\tqid:9\t # 716829772249\tnook\n",
      "2\tqid:9\t # 9781616874452\tnook\n",
      "1\tqid:9\t # 813580017937\tnook\n",
      "1\tqid:9\t # 9780594033912\tnook\n",
      "1\tqid:9\t # 660543005827\tnook\n",
      "1\tqid:9\t # 814916011896\tnook\n",
      "1\tqid:9\t # 814916011872\tnook\n",
      "1\tqid:9\t # 9781400532667\tnook\n",
      "1\tqid:9\t # 9780594033936\tnook\n",
      "1\tqid:9\t # 9781616826055\tnook\n",
      "1\tqid:9\t # 814916010240\tnook\n",
      "1\tqid:9\t # 600603135101\tnook\n",
      "1\tqid:9\t # 813580016824\tnook\n",
      "1\tqid:9\t # 36725234642\tnook\n",
      "1\tqid:9\t # 716829782446\tnook\n",
      "1\tqid:9\t # 843404077427\tnook\n",
      "1\tqid:9\t # 92636257521\tnook\n",
      "1\tqid:9\t # 813580013571\tnook\n",
      "1\tqid:9\t # 813580017043\tnook\n",
      "1\tqid:9\t # 813580017074\tnook\n",
      "0\tqid:9\t # 813580017067\tnook\n",
      "3\tqid:10\t # 50644555190\tstar trek\n",
      "3\tqid:10\t # 97360719840\tstar trek\n",
      "3\tqid:10\t # 97361427546\tstar trek\n",
      "3\tqid:10\t # 97360719741\tstar trek\n",
      "3\tqid:10\t # 13964123296\tstar trek\n",
      "3\tqid:10\t # 97360719642\tstar trek\n",
      "2\tqid:10\t # 30206696622\tstar trek\n",
      "2\tqid:10\t # 97363485049\tstar trek\n",
      "2\tqid:10\t # 738572128920\tstar trek\n",
      "2\tqid:10\t # 97360717648\tstar trek\n",
      "2\tqid:10\t # 97361166247\tstar trek\n",
      "2\tqid:10\t # 13964123302\tstar trek\n",
      "2\tqid:10\t # 5051368213637\tstar trek\n",
      "2\tqid:10\t # 29757201560\tstar trek\n",
      "1\tqid:10\t # 46034897179\tstar trek\n",
      "1\tqid:10\t # 883929139446\tstar trek\n",
      "1\tqid:10\t # 742725280410\tstar trek\n",
      "1\tqid:10\t # 635753490541\tstar trek\n",
      "1\tqid:10\t # 97361301747\tstar trek\n",
      "1\tqid:10\t # 31398121381\tstar trek\n",
      "1\tqid:10\t # 27242829619\tstar trek\n",
      "1\tqid:10\t # 97360743548\tstar trek\n",
      "1\tqid:10\t # 97360719147\tstar trek\n",
      "1\tqid:10\t # 791149900183\tstar trek\n",
      "1\tqid:10\t # 52824803121\tstar trek\n",
      "1\tqid:10\t # 97361311944\tstar trek\n",
      "1\tqid:10\t # 12505226021\tstar trek\n",
      "1\tqid:10\t # 50694439860\tstar trek\n",
      "1\tqid:10\t # 36725578340\tstar trek\n",
      "1\tqid:10\t # 36725235564\tstar trek\n",
      "4\tqid:11\t # 23272342630\tstar wars\n",
      "4\tqid:11\t # 24543742180\tstar wars\n",
      "3\tqid:11\t # 24543742098\tstar wars\n",
      "3\tqid:11\t # 23272341381\tstar wars\n",
      "2\tqid:11\t # 885370332889\tstar wars\n",
      "2\tqid:11\t # 886973561621\tstar wars\n",
      "2\tqid:11\t # 14633169522\tstar wars\n",
      "2\tqid:11\t # 24543781875\tstar wars\n",
      "2\tqid:11\t # 708431390614\tstar wars\n",
      "2\tqid:11\t # 884116069973\tstar wars\n",
      "2\tqid:11\t # 30206742121\tstar wars\n",
      "2\tqid:11\t # 24543742074\tstar wars\n",
      "2\tqid:11\t # 883929154012\tstar wars\n",
      "2\tqid:11\t # 23272342654\tstar wars\n",
      "2\tqid:11\t # 24543560067\tstar wars\n",
      "2\tqid:11\t # 883929200887\tstar wars\n",
      "1\tqid:11\t # 14633169546\tstar wars\n",
      "1\tqid:11\t # 24543023920\tstar wars\n",
      "1\tqid:11\t # 24543263739\tstar wars\n",
      "1\tqid:11\t # 400032015667\tstar wars\n",
      "1\tqid:11\t # 886971404722\tstar wars\n",
      "1\tqid:11\t # 23272332389\tstar wars\n",
      "1\tqid:11\t # 24543559856\tstar wars\n",
      "1\tqid:11\t # 827969295021\tstar wars\n",
      "1\tqid:11\t # 738572121921\tstar wars\n",
      "1\tqid:11\t # 883929094561\tstar wars\n",
      "1\tqid:11\t # 827969295120\tstar wars\n",
      "0\tqid:11\t # 24543203094\tstar wars\n",
      "0\tqid:11\t # 827969422021\tstar wars\n",
      "0\tqid:11\t # 97361455044\tstar wars\n",
      "6\tqid:12\t # 97360810042\ttransformers dark of the moon\n",
      "5\tqid:12\t # 400192926087\ttransformers dark of the moon\n",
      "4\tqid:12\t # 97363560449\ttransformers dark of the moon\n",
      "3\tqid:12\t # 97363532149\ttransformers dark of the moon\n",
      "3\tqid:12\t # 93624956037\ttransformers dark of the moon\n",
      "2\tqid:12\t # 47875842328\ttransformers dark of the moon\n",
      "2\tqid:12\t # 47875841420\ttransformers dark of the moon\n",
      "2\tqid:12\t # 25192107191\ttransformers dark of the moon\n",
      "2\tqid:12\t # 786936817218\ttransformers dark of the moon\n",
      "1\tqid:12\t # 36725235564\ttransformers dark of the moon\n",
      "1\tqid:12\t # 24543701538\ttransformers dark of the moon\n",
      "1\tqid:12\t # 47875841369\ttransformers dark of the moon\n",
      "1\tqid:12\t # 47875841406\ttransformers dark of the moon\n",
      "1\tqid:12\t # 24543750949\ttransformers dark of the moon\n",
      "1\tqid:12\t # 47875842335\ttransformers dark of the moon\n"
     ]
    }
   ],
   "source": [
    "!cat data/product_judgments.txt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Log features from Solr\n",
    "\n",
    "Log all the features to hydrate the judgmenst list. There's not too much to play with here, this is just code we need to build our training set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{!terms f=upc}856751002097,48231011396,84691226727,74108007469,12505525766,36725578241,48231011402,12505527456,74108096487,36725561977,84691226703,665331101927,783722274422,14381196320,77283045400,74108056764,883049066905,12505451713,36172950027,883929085118\n",
      "Searching products [Status: 200]\n",
      "{!terms f=upc}600603141003,27242813908,600603132872,36725608894,25192107191,36725608511,605342041546,883929140855,786936817232,22265004517,719192580374,24543742180,36725608443,23942973416,36725617605,27242815414,826663129342,58231306590,27242809758,36725608436,36725617506,711719983156,186156000290,58231300826,23942972389,786936805017,25192073007,885170038875,711719804604,27242809710\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603141003\n",
      "Missing doc 600603132872\n",
      "{!terms f=upc}27242815414,600603132872,827396513927,600603141003,885170033412,883929140855,24543672067,813774010904,36725617605,786936817232,36725608443,719192580374,25192073007,75993997675,36725608894,786936817218,711719983156,22265052211,883929197965,25192107191,22265004517,58231306590,58231300826,23942972389,826663129342,885170038875,786936805017,711719804604,36725608511,27242809710\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603132872\n",
      "Missing doc 600603141003\n",
      "{!terms f=upc}803238004525,27242799127,709483027855,615104173552,27242740389,878615035287,848447000005,46838046100,673796100317,17817553476,885909412006,723755894396,21331350091,731855020454,46838044106,615104194557,600603124570,50644614705,27242708242,743878021295,848447000135,17817542371,878615035294,27242745100,27242798236,709483027848,878615025226,27242807785,848447000081,27242801585\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603124570\n",
      "{!terms f=upc}885909457588,885909472376,821793013776,635753493559,722868830062,885909471812,92636260712,886111271283,885909457632,885909393404,885909457601,716829772249,885909457595,600603132827,27242798236,884962753071,886111287055,635753490879,843404073153,610839379408\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603132827\n",
      "{!terms f=upc}885909510344,600603140631,885909538041,705105070803,660715215252,56035362545,883929153121,884720011757,722868816622,885909538058,885909528912,636926048583,722868787595,600603125065,685387305636,899794006745,600603132827,97855069917,885909528905,885909420445,600603133237,885909420438,843404064434,885909538027,885909459834,885909343874,885909397723,885909394494,885909459858,885909538034\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603140631\n",
      "Missing doc 600603125065\n",
      "Missing doc 600603132827\n",
      "Missing doc 600603133237\n",
      "{!terms f=upc}814916011896,9781400532711,814916014361,814916011872,814916014590,814916014385,813580017906,814916010202,814916010240,9781400532650,813580018514,814916010288,813580018491,814916010219,92636257521,814916014606,813580015261,814916010233,813580018361,843404077182,813580015247,885909457595,716829772249,813580015933,813580015698,813580015155,813580015223,813580015636,813580015292,813580016107\n",
      "Searching products [Status: 200]\n",
      "{!terms f=upc}36725236271,883393003458,36725234789,882777064009,22265004289,27242817197,729507810218,885170042704,812491010310,812491010334,827912072969,74000373105,884483335329,827912068467,827912068474,97278016000,696211503197,605342041546,882777064207,885170042667,13803112610,729507813059,22265004258,719192579996,600603139758,36725235564,22265004302,723755834491\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603139758\n",
      "{!terms f=upc}885909436705,885909464043,885909431618,885909454396,885909432257,885909437023,885909436002,885909464036,885909463626,885909398577,885909377794,885909282883,885909398584,4712052310841,885909262236,94922876065,13803133929,27242827790,886112432140,650450759814,13803123470,36725729872,36725617421,28287033924,99802970796,27242836228,600603123061,400027951918,73502031827,29521842944\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603123061\n",
      "{!terms f=upc}600603135088,9781400532711,9781400532650,813580016961,9780594033899,814916014606,9781400532629,9780594033929,716829772249,9781616874452,813580017937,9780594033912,660543005827,814916011896,814916011872,9781400532667,9780594033936,9781616826055,814916010240,600603135101,813580016824,36725234642,716829782446,843404077427,92636257521,813580013571,813580017043,813580017074,813580017067\n",
      "Searching products [Status: 200]\n",
      "Missing doc 600603135101\n",
      "{!terms f=upc}50644555190,97360719840,97361427546,97360719741,13964123296,97360719642,30206696622,97363485049,738572128920,97360717648,97361166247,13964123302,5051368213637,29757201560,46034897179,883929139446,742725280410,635753490541,97361301747,31398121381,27242829619,97360743548,97360719147,791149900183,52824803121,97361311944,12505226021,50694439860,36725578340,36725235564\n",
      "Searching products [Status: 200]\n",
      "{!terms f=upc}23272342630,24543742180,24543742098,23272341381,885370332889,886973561621,14633169522,24543781875,708431390614,884116069973,30206742121,24543742074,883929154012,23272342654,24543560067,883929200887,14633169546,24543023920,24543263739,400032015667,886971404722,23272332389,24543559856,827969295021,738572121921,883929094561,827969295120,24543203094,827969422021,97361455044\n",
      "Searching products [Status: 200]\n",
      "{!terms f=upc}97360810042,400192926087,97363560449,97363532149,93624956037,47875842328,47875841420,25192107191,786936817218,36725235564,24543701538,47875841369,47875841406,24543750949,47875842335\n",
      "Searching products [Status: 200]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[Judgment(grade=4,qid=0,keywords=dryer,doc_id=856751002097,features=[2.9048662, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=0,keywords=dryer,doc_id=48231011396,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=84691226727,features=[2.3211834, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=74108007469,features=[2.443951, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=12505525766,features=[2.3211834, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=36725578241,features=[2.3211834, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=48231011402,features=[2.3211834, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=12505527456,features=[2.1092727, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=74108096487,features=[2.21016, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=36725561977,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=84691226703,features=[2.1092727, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=665331101927,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=783722274422,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=14381196320,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=77283045400,features=[2.9048662, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=74108056764,features=[2.3211834, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=883049066905,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=12505451713,features=[2.58043, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=36172950027,features=[2.443951, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=883929085118,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=5,qid=1,keywords=bluray,doc_id=27242813908,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608894,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=25192107191,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608511,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=605342041546,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=883929140855,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=786936817232,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=22265004517,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=719192580374,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=24543742180,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608443,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=23942973416,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725617605,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=27242815414,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=826663129342,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=58231306590,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=27242809758,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=36725608436,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=36725617506,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=711719983156,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=186156000290,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=58231300826,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=23942972389,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=786936805017,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=25192073007,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=885170038875,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=711719804604,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=1,keywords=bluray,doc_id=27242809710,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=8,qid=2,keywords=blue ray,doc_id=27242815414,features=[1.1563631, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=2,keywords=blue ray,doc_id=827396513927,features=[1.1563631, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=2,keywords=blue ray,doc_id=885170033412,features=[1.5442182, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=2,keywords=blue ray,doc_id=883929140855,features=[1.4471412, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=24543672067,features=[1.2175232, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=813774010904,features=[1.0507938, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725617605,features=[1.0049218, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=786936817232,features=[1.1010537, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725608443,features=[1.2175232, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=719192580374,features=[1.0507938, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=25192073007,features=[1.1563631, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=75993997675,features=[0.9242283, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725608894,features=[1.5442182, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=786936817218,features=[1.1010537, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=711719983156,features=[1.1010537, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=22265052211,features=[1.2855141, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=883929197965,features=[1.4471412, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=25192107191,features=[1.3615478, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=22265004517,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=58231306590,features=[0.9242283, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=58231300826,features=[0.85553074, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=23942972389,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=826663129342,features=[1.4255011, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=885170038875,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=786936805017,features=[1.2855141, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=711719804604,features=[1.2855141, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=36725608511,features=[1.2175232, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=2,keywords=blue ray,doc_id=27242809710,features=[1.0049218, 1.0],weight=1),\n",
       " Judgment(grade=6,qid=3,keywords=headphones,doc_id=803238004525,features=[2.8473306, 1.0],weight=1),\n",
       " Judgment(grade=6,qid=3,keywords=headphones,doc_id=27242799127,features=[2.465322, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=3,keywords=headphones,doc_id=709483027855,features=[2.0523045, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=3,keywords=headphones,doc_id=615104173552,features=[2.31034, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=27242740389,features=[2.0523045, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=878615035287,features=[1.9437582, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=848447000005,features=[1.677577, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=46838046100,features=[2.0523045, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=673796100317,features=[2.465322, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=17817553476,features=[1.7578163, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=885909412006,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=723755894396,features=[2.1736913, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=21331350091,features=[2.1736913, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=731855020454,features=[1.475517, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=46838044106,features=[2.0523045, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=615104194557,features=[2.31034, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=50644614705,features=[1.537236, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242708242,features=[2.0523045, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=743878021295,features=[2.31034, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=848447000135,features=[1.6043429, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=17817542371,features=[2.0523045, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=878615035294,features=[1.9437582, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242745100,features=[2.31034, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242798236,features=[2.465322, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=709483027848,features=[2.31034, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=878615025226,features=[1.9437582, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242807785,features=[2.1736913, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=848447000081,features=[1.846117, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242801585,features=[2.1736913, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=4,keywords=ipad,doc_id=885909457588,features=[1.9471629, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=4,keywords=ipad,doc_id=885909472376,features=[1.9471629, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=4,keywords=ipad,doc_id=821793013776,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=3,qid=4,keywords=ipad,doc_id=635753493559,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=722868830062,features=[1.9471629, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909471812,features=[1.9471629, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=92636260712,features=[1.8582804, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=886111271283,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457632,features=[1.7028222, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909393404,features=[2.1531339, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457601,features=[1.9471629, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=716829772249,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457595,features=[1.9471629, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=27242798236,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=884962753071,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=886111287055,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=635753490879,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=843404073153,features=[2.044975, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=4,keywords=ipad,doc_id=610839379408,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=4,qid=5,keywords=iphone,doc_id=885909510344,features=[1.933495, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=885909538041,features=[1.6802778, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=705105070803,features=[2.1494417, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=660715215252,features=[1.6099944, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=56035362545,features=[1.4304888, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=883929153121,features=[2.0357578, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=884720011757,features=[1.756978, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=722868816622,features=[1.5453544, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=885909538058,features=[1.6802778, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=885909528912,features=[1.6099944, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=636926048583,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=722868787595,features=[1.5453544, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=685387305636,features=[1.5453544, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=899794006745,features=[1.5453544, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=97855069917,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909528905,features=[1.6099944, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909420445,features=[1.6099944, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909420438,features=[1.6099944, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=843404064434,features=[1.933495, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909538027,features=[1.6802778, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909459834,features=[1.6099944, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909343874,features=[1.8410151, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909397723,features=[1.8410151, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909394494,features=[1.8410151, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909459858,features=[1.6099944, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=5,keywords=iphone,doc_id=885909538034,features=[1.6802778, 1.0],weight=1),\n",
       " Judgment(grade=5,qid=6,keywords=kindle,doc_id=814916011896,features=[3.0079496, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=6,keywords=kindle,doc_id=9781400532711,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014361,features=[3.386138, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916011872,features=[2.351397, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014590,features=[3.0079496, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014385,features=[3.8731017, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580017906,features=[2.705752, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010202,features=[2.705752, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010240,features=[3.6132865, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=9781400532650,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580018514,features=[2.705752, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010288,features=[2.848859, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580018491,features=[2.705752, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010219,features=[2.705752, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=92636257521,features=[2.4587321, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916014606,features=[3.1858597, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580015261,features=[2.4587321, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010233,features=[3.6132865, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580018361,features=[2.5763345, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=843404077182,features=[2.4587321, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015247,features=[2.4587321, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=885909457595,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=716829772249,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015933,features=[2.2530417, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015698,features=[2.4587321, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015155,features=[2.5763345, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015223,features=[2.5763345, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580015636,features=[2.351397, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580015292,features=[2.5763345, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580016107,features=[2.5763345, 1.0],weight=1),\n",
       " Judgment(grade=6,qid=7,keywords=lcd tv,doc_id=36725236271,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=5,qid=7,keywords=lcd tv,doc_id=883393003458,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=7,keywords=lcd tv,doc_id=36725234789,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=7,keywords=lcd tv,doc_id=882777064009,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=7,keywords=lcd tv,doc_id=22265004289,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=7,keywords=lcd tv,doc_id=27242817197,features=[2.1861553, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=7,keywords=lcd tv,doc_id=729507810218,features=[1.8044133, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=885170042704,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=812491010310,features=[2.1861553, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=812491010334,features=[1.9770255, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912072969,features=[3.5097218, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=74000373105,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=884483335329,features=[1.9770255, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912068467,features=[3.6629364, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912068474,features=[3.6629364, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=97278016000,features=[2.4447625, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=696211503197,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=605342041546,features=[2.1861553, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=882777064207,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=885170042667,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=13803112610,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=729507813059,features=[1.8044133, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=22265004258,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=719192579996,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=36725235564,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=22265004302,features=[2.308238, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=723755834491,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=5,qid=8,keywords=macbook,doc_id=885909436705,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=8,keywords=macbook,doc_id=885909464043,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909431618,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909454396,features=[2.1842465, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909432257,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909437023,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909436002,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909464036,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909463626,features=[1.8064427, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909398577,features=[1.7460413, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909377794,features=[3.1365404, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909282883,features=[1.7460413, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909398584,features=[1.7460413, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=4712052310841,features=[2.4976678, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=885909262236,features=[1.9407148, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=94922876065,features=[2.096551, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=13803133929,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=27242827790,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=886112432140,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=650450759814,features=[2.3836563, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=13803123470,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=36725729872,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=36725617421,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=28287033924,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=99802970796,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=27242836228,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=400027951918,features=[2.3836563, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=73502031827,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=29521842944,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=7,qid=9,keywords=nook,doc_id=600603135088,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=5,qid=9,keywords=nook,doc_id=9781400532711,features=[4.022286, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=9,keywords=nook,doc_id=9781400532650,features=[4.2921085, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=9,keywords=nook,doc_id=813580016961,features=[2.92065, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9780594033899,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=814916014606,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9781400532629,features=[3.573048, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9780594033929,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=716829772249,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9781616874452,features=[3.214077, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017937,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9780594033912,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=660543005827,features=[3.214077, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916011896,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916011872,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9781400532667,features=[3.573048, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9780594033936,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9781616826055,features=[3.0603461, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916010240,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580016824,features=[2.92065, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=36725234642,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=716829782446,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=843404077427,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=92636257521,features=[2.92065, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580013571,features=[3.214077, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017043,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017074,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=0,qid=9,keywords=nook,doc_id=813580017067,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=50644555190,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719840,features=[4.384173, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97361427546,features=[5.0132647, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719741,features=[4.784424, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=13964123296,features=[4.784424, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719642,features=[5.853141, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=30206696622,features=[5.0132647, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97363485049,features=[5.853141, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=738572128920,features=[6.199334, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97360717648,features=[4.384173, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97361166247,features=[5.2650967, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=13964123302,features=[4.5755615, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=5051368213637,features=[4.384173, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=29757201560,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=46034897179,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=883929139446,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=742725280410,features=[6.199334, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=635753490541,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97361301747,features=[5.543568, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=31398121381,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=27242829619,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97360743548,features=[4.04572, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97360719147,features=[4.5755615, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=791149900183,features=[5.2650967, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=52824803121,features=[5.0132647, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97361311944,features=[5.0132647, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=12505226021,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=50694439860,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=36725578340,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=36725235564,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=4,qid=11,keywords=star wars,doc_id=23272342630,features=[5.9710317, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=11,keywords=star wars,doc_id=24543742180,features=[3.7745268, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=11,keywords=star wars,doc_id=24543742098,features=[4.4637127, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=11,keywords=star wars,doc_id=23272341381,features=[5.1719704, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=885370332889,features=[4.6772146, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=886973561621,features=[5.1719704, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=14633169522,features=[5.783779, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543781875,features=[5.783779, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=708431390614,features=[5.7355747, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=884116069973,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=30206742121,features=[5.4607916, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543742074,features=[4.4637127, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=883929154012,features=[5.317559, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=23272342654,features=[5.9710317, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543560067,features=[4.4637127, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=883929200887,features=[4.644003, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=14633169546,features=[5.1719704, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543023920,features=[4.9121656, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543263739,features=[6.1473746, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=400032015667,features=[5.1719704, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=886971404722,features=[5.1719704, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=23272332389,features=[5.4607916, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543559856,features=[4.6772146, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=827969295021,features=[4.4637127, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=738572121921,features=[5.783779, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=883929094561,features=[4.644003, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=827969295120,features=[4.6772146, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=24543203094,features=[4.9121656, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=827969422021,features=[4.6772146, 1.0],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=97361455044,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=6,qid=12,keywords=transformers dark of the moon,doc_id=97360810042,features=[10.281868, 1.0],weight=1),\n",
       " Judgment(grade=5,qid=12,keywords=transformers dark of the moon,doc_id=400192926087,features=[10.281868, 1.0],weight=1),\n",
       " Judgment(grade=4,qid=12,keywords=transformers dark of the moon,doc_id=97363560449,features=[9.765377, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=12,keywords=transformers dark of the moon,doc_id=97363532149,features=[4.7606792, 1.0],weight=1),\n",
       " Judgment(grade=3,qid=12,keywords=transformers dark of the moon,doc_id=93624956037,features=[10.281868, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=47875842328,features=[9.298294, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=47875841420,features=[10.281868, 1.0],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=25192107191,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=786936817218,features=[1.8386269, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=36725235564,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=24543701538,features=[0.7211938, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875841369,features=[10.856045, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875841406,features=[10.281868, 1.0],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=24543750949,features=[0.0, 0.0],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875842335,features=[9.298294, 1.0],weight=1)]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from ltr.log import FeatureLogger\n",
    "from ltr.judgments import judgments_open\n",
    "from itertools import groupby\n",
    "from ltr import download\n",
    "\n",
    "ftr_logger=FeatureLogger(index='products', feature_set='test', id_field='upc')\n",
    "\n",
    "with judgments_open('data/product_judgments.txt') as judgment_list:\n",
    "    for qid, query_judgments in groupby(judgments, key=lambda j: j.qid):\n",
    "        ftr_logger.log_for_qid(judgments=query_judgments, \n",
    "                               qid=qid,\n",
    "                               keywords=judgment_list.keywords(qid))\n",
    "\n",
    "logged_judgments = ftr_logger.logged\n",
    "\n",
    "# Now should have lots of judgments with title_bm25, overview_bm25, and release_year \n",
    "# logged out\n",
    "logged_judgments"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Normalize features\n",
    "\n",
    "Normalize features using mean & std deviation. \n",
    "\n",
    "### What you should play with\n",
    "\n",
    "Instead of standard normalization, could you use a different formula, like [min-max normalization](https://www.codecademy.com/articles/normalization). What would be the pros/cons of this vs mean & std deviation?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Judgment(grade=4,qid=0,keywords=dryer,doc_id=856751002097,features=[0.3694399385898592, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=0,keywords=dryer,doc_id=48231011396,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=84691226727,features=[0.095963720472352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=74108007469,features=[0.15348472152868428, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=12505525766,features=[0.095963720472352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=36725578241,features=[0.095963720472352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=48231011402,features=[0.095963720472352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=0,keywords=dryer,doc_id=12505527456,features=[-0.003324003638472529, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=74108096487,features=[0.04394529615944239, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=36725561977,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=84691226703,features=[-0.003324003638472529, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=665331101927,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=783722274422,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=14381196320,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=77283045400,features=[0.3694399385898592, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=0,keywords=dryer,doc_id=74108056764,features=[0.095963720472352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=883049066905,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=12505451713,features=[0.2174300027198709, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=36172950027,features=[0.15348472152868428, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=0,keywords=dryer,doc_id=883929085118,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=5,qid=1,keywords=bluray,doc_id=27242813908,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608894,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=25192107191,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608511,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=605342041546,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=883929140855,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=786936817232,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=22265004517,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=719192580374,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=24543742180,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725608443,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=23942973416,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=36725617605,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=27242815414,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=1,keywords=bluray,doc_id=826663129342,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=58231306590,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=27242809758,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=36725608436,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=36725617506,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=711719983156,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=186156000290,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=58231300826,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=23942972389,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=786936805017,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=25192073007,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=885170038875,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=1,keywords=bluray,doc_id=711719804604,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=1,keywords=bluray,doc_id=27242809710,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=8,qid=2,keywords=blue ray,doc_id=27242815414,features=[-0.44979615189411154, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=2,keywords=blue ray,doc_id=827396513927,features=[-0.44979615189411154, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=2,keywords=blue ray,doc_id=885170033412,features=[-0.2680721985317929, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=2,keywords=blue ray,doc_id=883929140855,features=[-0.3135562368248406, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=24543672067,features=[-0.42114046279775896, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=813774010904,features=[-0.4992591357499192, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725617605,features=[-0.5207518045033693, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=786936817232,features=[-0.47571057928232385, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725608443,features=[-0.42114046279775896, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=719192580374,features=[-0.4992591357499192, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=25192073007,features=[-0.44979615189411154, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=75993997675,features=[-0.5585595884686755, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=36725608894,features=[-0.2680721985317929, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=786936817218,features=[-0.47571057928232385, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=711719983156,features=[-0.47571057928232385, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=22265052211,features=[-0.38928430017243293, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=883929197965,features=[-0.3135562368248406, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=2,keywords=blue ray,doc_id=25192107191,features=[-0.35365979877290377, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=22265004517,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=58231306590,features=[-0.5585595884686755, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=58231300826,features=[-0.5907468465182542, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=23942972389,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=826663129342,features=[-0.3236953958127098, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=885170038875,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=786936805017,features=[-0.38928430017243293, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=711719804604,features=[-0.38928430017243293, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=2,keywords=blue ray,doc_id=36725608511,features=[-0.42114046279775896, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=2,keywords=blue ray,doc_id=27242809710,features=[-0.5207518045033693, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=6,qid=3,keywords=headphones,doc_id=803238004525,features=[0.3424824570688659, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=6,qid=3,keywords=headphones,doc_id=27242799127,features=[0.16349779756482788, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=3,keywords=headphones,doc_id=709483027855,features=[-0.03001563801413304, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=3,keywords=headphones,doc_id=615104173552,features=[0.09088320067026891, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=27242740389,features=[-0.03001563801413304, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=878615035287,features=[-0.08087345259192831, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=848447000005,features=[-0.20558884237209618, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=46838046100,features=[-0.03001563801413304, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=673796100317,features=[0.16349779756482788, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=17817553476,features=[-0.16799386731304689, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=885909412006,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=723755894396,features=[0.026858408974036366, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=21331350091,features=[0.026858408974036366, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=731855020454,features=[-0.3002611620512499, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=46838044106,features=[-0.03001563801413304, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=3,keywords=headphones,doc_id=615104194557,features=[0.09088320067026891, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=50644614705,features=[-0.27134360836285193, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242708242,features=[-0.03001563801413304, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=743878021295,features=[0.09088320067026891, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=848447000135,features=[-0.23990163127942626, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=17817542371,features=[-0.03001563801413304, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=878615035294,features=[-0.08087345259192831, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242745100,features=[0.09088320067026891, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242798236,features=[0.16349779756482788, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=709483027848,features=[0.09088320067026891, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=878615025226,features=[-0.08087345259192831, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242807785,features=[0.026858408974036366, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=848447000081,features=[-0.12662183871612992, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=3,keywords=headphones,doc_id=27242801585,features=[0.026858408974036366, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=4,keywords=ipad,doc_id=885909457588,features=[-0.0792782291592271, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=4,keywords=ipad,doc_id=885909472376,features=[-0.0792782291592271, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=4,keywords=ipad,doc_id=821793013776,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=3,qid=4,keywords=ipad,doc_id=635753493559,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=722868830062,features=[-0.0792782291592271, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909471812,features=[-0.0792782291592271, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=92636260712,features=[-0.12092285181528159, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=886111271283,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457632,features=[-0.19376056540107692, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909393404,features=[0.017226533567858644, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457601,features=[-0.0792782291592271, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=716829772249,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=885909457595,features=[-0.0792782291592271, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=27242798236,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=884962753071,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=886111287055,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=635753490879,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=4,keywords=ipad,doc_id=843404073153,features=[-0.03344977028716261, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=4,keywords=ipad,doc_id=610839379408,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=4,qid=5,keywords=iphone,doc_id=885909510344,features=[-0.08568212799196341, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=885909538041,features=[-0.20432342120516828, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=705105070803,features=[0.015496606126903765, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=5,keywords=iphone,doc_id=660715215252,features=[-0.23725370187891784, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=56035362545,features=[-0.32135848039717124, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=883929153121,features=[-0.03776835736499449, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=884720011757,features=[-0.16838664077433085, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=722868816622,features=[-0.26753984829117405, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=885909538058,features=[-0.20432342120516828, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=885909528912,features=[-0.23725370187891784, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=636926048583,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=722868787595,features=[-0.26753984829117405, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=685387305636,features=[-0.26753984829117405, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=899794006745,features=[-0.26753984829117405, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=5,keywords=iphone,doc_id=97855069917,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909528905,features=[-0.23725370187891784, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909420445,features=[-0.23725370187891784, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909420438,features=[-0.23725370187891784, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=843404064434,features=[-0.08568212799196341, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909538027,features=[-0.20432342120516828, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909459834,features=[-0.23725370187891784, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909343874,features=[-0.12901226090642529, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909397723,features=[-0.12901226090642529, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909394494,features=[-0.12901226090642529, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=5,keywords=iphone,doc_id=885909459858,features=[-0.23725370187891784, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=5,keywords=iphone,doc_id=885909538034,features=[-0.20432342120516828, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=5,qid=6,keywords=kindle,doc_id=814916011896,features=[0.4177381895965605, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=6,keywords=kindle,doc_id=9781400532711,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014361,features=[0.5949329490924906, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916011872,features=[0.11011987012026891, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014590,features=[0.4177381895965605, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=6,keywords=kindle,doc_id=814916014385,features=[0.8230928178371381, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580017906,features=[0.27614783131944975, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010202,features=[0.27614783131944975, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010240,features=[0.7013601262014694, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=9781400532650,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580018514,features=[0.27614783131944975, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010288,features=[0.343198567003527, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580018491,features=[0.27614783131944975, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010219,features=[0.27614783131944975, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=92636257521,features=[0.1604101942813792, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916014606,features=[0.5010954194359657, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=813580015261,features=[0.1604101942813792, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=6,keywords=kindle,doc_id=814916010233,features=[0.7013601262014694, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580018361,features=[0.2155111148388161, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=843404077182,features=[0.1604101942813792, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015247,features=[0.1604101942813792, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=885909457595,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=716829772249,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015933,features=[0.06403690266634893, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015698,features=[0.1604101942813792, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015155,features=[0.2155111148388161, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=6,keywords=kindle,doc_id=813580015223,features=[0.2155111148388161, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580015636,features=[0.11011987012026891, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580015292,features=[0.2155111148388161, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=6,keywords=kindle,doc_id=813580016107,features=[0.2155111148388161, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=6,qid=7,keywords=lcd tv,doc_id=36725236271,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=5,qid=7,keywords=lcd tv,doc_id=883393003458,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=7,keywords=lcd tv,doc_id=36725234789,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=7,keywords=lcd tv,doc_id=882777064009,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=7,keywords=lcd tv,doc_id=22265004289,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=7,keywords=lcd tv,doc_id=27242817197,features=[0.03269823770055785, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=7,keywords=lcd tv,doc_id=729507810218,features=[-0.1461615101909568, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=885170042704,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=812491010310,features=[0.03269823770055785, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=812491010334,features=[-0.06528653553529999, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912072969,features=[0.6528363689715592, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=74000373105,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=884483335329,features=[-0.06528653553529999, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912068467,features=[0.7246228759037261, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=827912068474,features=[0.7246228759037261, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=7,keywords=lcd tv,doc_id=97278016000,features=[0.15386493823372047, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=696211503197,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=605342041546,features=[0.03269823770055785, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=882777064207,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=885170042667,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=13803112610,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=729507813059,features=[-0.1461615101909568, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=22265004258,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=719192579996,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=36725235564,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=22265004302,features=[0.08989833866905339, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=7,keywords=lcd tv,doc_id=723755834491,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=5,qid=8,keywords=macbook,doc_id=885909436705,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=8,keywords=macbook,doc_id=885909464043,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909431618,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909454396,features=[0.031803896792889086, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909432257,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909437023,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909436002,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909464036,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909463626,features=[-0.14521066388017345, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=8,keywords=macbook,doc_id=885909398577,features=[-0.17351087495544043, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909377794,features=[0.4779875676298086, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909282883,features=[-0.17351087495544043, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=8,keywords=macbook,doc_id=885909398584,features=[-0.17351087495544043, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=4712052310841,features=[0.1786529589915227, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=885909262236,features=[-0.08229939408312661, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=94922876065,features=[-0.009284574009957755, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=13803133929,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=27242827790,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=886112432140,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=8,keywords=macbook,doc_id=650450759814,features=[0.12523450321056753, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=13803123470,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=36725729872,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=36725617421,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=28287033924,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=99802970796,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=27242836228,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=400027951918,features=[0.12523450321056753, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=73502031827,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=8,keywords=macbook,doc_id=29521842944,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=7,qid=9,keywords=nook,doc_id=600603135088,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=5,qid=9,keywords=nook,doc_id=9781400532711,features=[0.8929909854146437, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=9,keywords=nook,doc_id=9781400532650,features=[1.0194124541696097, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=9,keywords=nook,doc_id=813580016961,features=[0.3768352120697753, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9780594033899,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=814916014606,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9781400532629,features=[0.6825069532062717, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9780594033929,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=716829772249,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=9,keywords=nook,doc_id=9781616874452,features=[0.5143162313041364, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017937,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9780594033912,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=660543005827,features=[0.5143162313041364, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916011896,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916011872,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9781400532667,features=[0.6825069532062717, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9780594033936,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=9781616826055,features=[0.44228781939992967, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=814916010240,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580016824,features=[0.3768352120697753, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=36725234642,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=716829782446,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=843404077427,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=92636257521,features=[0.3768352120697753, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580013571,features=[0.5143162313041364, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017043,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=9,keywords=nook,doc_id=813580017074,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=0,qid=9,keywords=nook,doc_id=813580017067,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=50644555190,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719840,features=[1.0625479573622327, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97361427546,features=[1.3572998653593733, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719741,features=[1.2500798321712048, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=13964123296,features=[1.2500798321712048, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=10,keywords=star trek,doc_id=97360719642,features=[1.7508118794370966, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=30206696622,features=[1.3572998653593733, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97363485049,features=[1.7508118794370966, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=738572128920,features=[1.9130156524089135, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97360717648,features=[1.0625479573622327, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=97361166247,features=[1.4752921429474195, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=13964123302,features=[1.152220298522847, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=5051368213637,features=[1.0625479573622327, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=10,keywords=star trek,doc_id=29757201560,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=46034897179,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=883929139446,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=742725280410,features=[1.9130156524089135, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=635753490541,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97361301747,features=[1.6057658830992034, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=31398121381,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=27242829619,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97360743548,features=[0.9039706505604483, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97360719147,features=[1.152220298522847, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=791149900183,features=[1.4752921429474195, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=52824803121,features=[1.3572998653593733, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=97361311944,features=[1.3572998653593733, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=12505226021,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=50694439860,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=36725578340,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=10,keywords=star trek,doc_id=36725235564,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=4,qid=11,keywords=star wars,doc_id=23272342630,features=[1.8060478788313319, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=11,keywords=star wars,doc_id=24543742180,features=[0.7769069599476963, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=11,keywords=star wars,doc_id=24543742098,features=[1.0998151448589368, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=11,keywords=star wars,doc_id=23272341381,features=[1.4316591485688352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=885370332889,features=[1.199848402945182, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=886973561621,features=[1.4316591485688352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=14633169522,features=[1.7183133075397123, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543781875,features=[1.7183133075397123, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=708431390614,features=[1.6957278730177394, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=884116069973,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=30206742121,features=[1.566982186164187, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543742074,features=[1.0998151448589368, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=883929154012,features=[1.4998726023985909, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=23272342654,features=[1.8060478788313319, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=24543560067,features=[1.0998151448589368, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=11,keywords=star wars,doc_id=883929200887,features=[1.1842875833259785, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=14633169546,features=[1.4316591485688352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543023920,features=[1.3099313297042474, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543263739,features=[1.8886708195516575, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=400032015667,features=[1.4316591485688352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=886971404722,features=[1.4316591485688352, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=23272332389,features=[1.566982186164187, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=24543559856,features=[1.199848402945182, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=827969295021,features=[1.0998151448589368, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=738572121921,features=[1.7183133075397123, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=883929094561,features=[1.1842875833259785, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=11,keywords=star wars,doc_id=827969295120,features=[1.199848402945182, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=24543203094,features=[1.3099313297042474, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=827969422021,features=[1.199848402945182, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=0,qid=11,keywords=star wars,doc_id=97361455044,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=6,qid=12,keywords=transformers dark of the moon,doc_id=97360810042,features=[3.8258284998255903, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=5,qid=12,keywords=transformers dark of the moon,doc_id=400192926087,features=[3.8258284998255903, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=4,qid=12,keywords=transformers dark of the moon,doc_id=97363560449,features=[3.5838340374708166, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=12,keywords=transformers dark of the moon,doc_id=97363532149,features=[1.238954546135782, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=3,qid=12,keywords=transformers dark of the moon,doc_id=93624956037,features=[3.8258284998255903, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=47875842328,features=[3.3649889860370927, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=47875841420,features=[3.8258284998255903, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=25192107191,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=2,qid=12,keywords=transformers dark of the moon,doc_id=786936817218,features=[-0.1301312178195093, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=36725235564,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=24543701538,features=[-0.6536884961688494, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875841369,features=[4.094850911467764, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875841406,features=[3.8258284998255903, 0.6560333427772118],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=24543750949,features=[-0.9915935243002143, -1.5243127670411685],weight=1),\n",
       " Judgment(grade=1,qid=12,keywords=transformers dark of the moon,doc_id=47875842335,features=[3.3649889860370927, 0.6560333427772118],weight=1)]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from ltr.judgments import Judgment\n",
    "\n",
    "def normalize_features(logged_judgments):\n",
    "    all_features = []\n",
    "    means = [0] * len(logged_judgments[0].features)\n",
    "    for judgment in logged_judgments:\n",
    "        for idx, f in enumerate(judgment.features):\n",
    "            means[idx] += f\n",
    "        all_features.append(judgment.features)\n",
    "    \n",
    "    for i in range(len(means)):\n",
    "        means[i] /= len(logged_judgments)\n",
    "      \n",
    "    std_devs = [0.0] * len(logged_judgments[0].features)\n",
    "    for judgment in logged_judgments:\n",
    "        for idx, f in enumerate(judgment.features):\n",
    "            std_devs[idx] += (f - means[idx])**2\n",
    "            \n",
    "    from math import sqrt\n",
    "    for i in range(len(std_devs)):\n",
    "        std_devs[i] /= len(logged_judgments)\n",
    "        std_devs[i] = sqrt(std_devs[i])\n",
    "        \n",
    "    # Normalize!\n",
    "    normed_judgments = []\n",
    "    for judgment in logged_judgments:\n",
    "        normed_features = [0.0] * len(judgment.features)\n",
    "        for idx, f in enumerate(judgment.features):\n",
    "            normed = (f - means[idx]) / std_devs[idx]\n",
    "            normed_features[idx] = normed\n",
    "        normed_judgment=Judgment(qid=judgment.qid,\n",
    "                                 keywords=judgment.keywords,\n",
    "                                 doc_id=judgment.doc_id,\n",
    "                                 grade=judgment.grade,\n",
    "                                 features=normed_features)\n",
    "        normed_judgment.old_features=judgment.features\n",
    "        normed_judgments.append(normed_judgment)\n",
    "\n",
    "    return means, std_devs, normed_judgments\n",
    "\n",
    "means, std_devs, normed_judgments = normalize_features(ftr_logger.logged)\n",
    "\n",
    "normed_judgments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2.1163671514454276, 0.6991150442477876]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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o0ePLsvdICIionKoXCVNgwcPRmxsLObMmYOoqCg0atQIBw4ckDqHh4eHw8jo/y+ePX36FGPGjEFUVBTs7e3RtGlT/Pvvv6hTp05Z7QIRERGVUwohhCjrIAxZUlISbG1tkZiYCBsbm7IOh4iIiGQoifN3uenTRERERFSWmDQRERERycCkiYiIiEgGJk1EREREMjBpIiIiIpKBSRMRERGRDEyaiIiIiGRg0kREREQkA5MmIiIiIhmYNBERERHJwKSJiIiISAYmTUREREQyMGkiIiIikoFJExEREZEMTJqIiIiIZGDSRERERCQDkyYiIiIiGZg0EREREcnApImIiIhIBiZNRERERDIwaSIiIiKSgUkTERERkQxMmoiIiIhkYNJEREREJAOTJiIiIiIZmDQRERERyaCXpCkhIUEfqyEiIiIyWDonTYsXL8b27dul94MGDULFihVRuXJlBAcH6zU4IiIiIkOhc9K0cuVKuLm5AQAOHz6Mw4cPY//+/ejWrRs++eQTvQdIREREZAhMdF0gKipKSpr27NmDQYMGoUuXLvDw8ECLFi30HiARERGRIdD5SpO9vT0iIiIAAAcOHECnTp0AAEIIqNVq/UZHREREZCB0vtLUv39/DBs2DN7e3oiLi0O3bt0AAJcuXUL16tX1HiARERGRIdA5aVq6dCk8PDwQERGBr7/+GlZWVgCAyMhIfPDBB3oPkIiIiMgQKIQQQpcFMjIyYG5uXlLxGJykpCTY2toiMTERNjY2ZR0OERERyVAS52+d+zQ5OTlh5MiROHz4MDQajV6CICIiIjJ0OidNGzZsQGpqKvr06YPKlStj8uTJuHDhQknERkRERGQwdE6a+vXrhx07diA6OhpfffUVQkJC0LJlS9SoUQMLFiwoiRiJiIiIypzOfZoKEhISAj8/P1y5cuWVG3aAfZqIiIjKH4Po05QnIyMDv/32G/r27YsmTZogPj6eI4ITERHRK0vnIQcOHjyIrVu34q+//oKJiQnefvttHDp0CG+++WZJxEdERERkEHROmvr164eePXti48aN6N69O0xNTUsiLiIiIiKDonPSFB0dDWtr65KIhYiIiMhg6dynydraGnfv3sWsWbMwdOhQxMTEAAD279+P69ev6z1AIiIiIkOgc9J04sQJ1K9fH+fOncPOnTuRkpICAAgODsbcuXP1HiARERGRIdA5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tm347bff0L1795KIh4iIiMgg6Xz3nJmZGTt9ExER0WtH56Rp6tSpWL58OXQcSJyIiIioXJPVPNe/f3+t90ePHsX+/ftRt25dmJqaas3buXOn/qIjIiIiMhCykiZbW1ut9/369SuRYIiIiIgMlaykKSAgoKTjICIiIjJoOvdpSk9PR1pamvT+wYMHWLZsGQ4dOqTXwIiIiIgMic5JU58+fbBx40YAQEJCApo3b45vv/0Wffr0wc8//6z3AImIiIgMgc5JU1BQENq1awcA+P333+Hi4oIHDx5g48aN+P777/UeIBEREZEh0DlpSktLg7W1NQDg0KFD6N+/P4yMjNCyZUs8ePBA7wESERERGQKdk6bq1avjr7/+QkREBA4ePIguXboAAGJiYmBjY6P3AImIiIgMgc5J05w5czBt2jR4eHigRYsWaNWqFYDcq06NGzfWe4BEREREhkAhijG0d1RUFCIjI9GwYUMYGeXmXefPn4eNjQ1q1aql9yDLUlJSEmxtbZGYmMgraUREROVESZy/dX5gLwC4uLjAxcVFa1rz5s31EhARERGRIdK5eY6IiIjodcSkiYiIiEgGJk1EREREMjBpIiIiIpKBSRMRERGRDEyaiIiIiGRg0kREREQkA5MmIiIiIhmYNBERERHJwKSJiIiISAYmTUREREQyMGkiIiIikoFJExEREZEMTJqIiIiIZGDSRERERCQDkyYiIiIiGZg0EREREcnApImIiIhIBiZNRERERDIwaSIiIiKSgUkTERERkQxMmoiIiIhkYNJEREREJAOTJiIiIiIZmDQRERERycCkiYiIiEgGJk1EREREMjBpIiIiIpKBSRMRERGRDEyaiIiIiGRg0kREREQkA5MmIiIiIhmYNBERERHJwKSJiIiISAYmTUREREQyMGkiIiIikoFJExEREZEMTJqIiIiIZGDSRERERCQDkyYiIiIiGZg0EREREcnApImIiIhIBiZNRERERDIwaSIiIiKSgUkTERERkQzlJmn68ssv0bp1a1hYWMDOzk7WMiNHjoRCodB6de3atWQDJSIioleSSVkHIFdWVhYGDhyIVq1aYe3atbKX69q1KwICAqT3SqWyJMIjIiKiV1y5SZrmz58PAFi/fr1OyymVSri4uJRARC+nnp05kJENmJviWkJGWYdDREREL1BumueK6/jx43ByckLNmjUx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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ltr.plots import plot_judgments\n",
    "\n",
    "plot_judgments(qids=[0,2,1,9], \n",
    "               xlabel=\"name BM25 Std Devs\",\n",
    "               ylabel=\"short_description BM25 Std Devs\",\n",
    "               title_prepend=\"Normalized features for queries:\",\n",
    "               judg_list=normed_judgments)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Pairwise Transform\n",
    "\n",
    "Track the difference between relevant / irrelevant docs.\n",
    "\n",
    "### What you should play with\n",
    "\n",
    "You can opt to weigh the feature difference by the significance of the grade difference. So very different documents create a very far-apart points in the feature space. Does this change anything? This is controled by the `weigh_difference` parameter to `pairwise_transform`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "from ltr.judgments import judgments_from_file, judgments_to_nparray\n",
    "\n",
    "def pairwise_transform(normed_judgments, weigh_difference = True):\n",
    "        \n",
    "    from itertools import groupby\n",
    "    predictor_deltas = []\n",
    "    feature_deltas = []\n",
    "    \n",
    "    # For each query's judgments\n",
    "    for qid, query_judgments in groupby(normed_judgments, key=lambda j: j.qid):\n",
    "\n",
    "        # Annoying issue consuming python iterators, we ensure we have two\n",
    "        # full copies of each query's judgments\n",
    "        query_judgments_copy_1 = list(query_judgments) \n",
    "        query_judgments_copy_2 = list(query_judgments_copy_1)\n",
    "\n",
    "        # Examine every judgment combo for this query, \n",
    "        # if they're different, store the pairwise difference:\n",
    "        # +1 if judgment1 more relevant\n",
    "        # -1 if judgment2 more relevant\n",
    "        for judgment1 in query_judgments_copy_1:\n",
    "            for judgment2 in query_judgments_copy_2:\n",
    "                \n",
    "                j1_features=numpy.array(judgment1.features)\n",
    "                j2_features=numpy.array(judgment2.features)\n",
    "                \n",
    "                if judgment1.grade > judgment2.grade:\n",
    "                    diff = judgment1.grade - judgment2.grade if weigh_difference else 1.0\n",
    "                    predictor_deltas.append(+1)\n",
    "                    feature_deltas.append(diff * (j1_features-j2_features))\n",
    "                elif judgment1.grade < judgment2.grade:\n",
    "                    diff = judgment2.grade - judgment1.grade if weigh_difference else 1.0\n",
    "                    predictor_deltas.append(-1)\n",
    "                    feature_deltas.append(diff * (j1_features-j2_features))\n",
    "\n",
    "    # For training purposes, we return these as numpy arrays\n",
    "    return numpy.array(feature_deltas), numpy.array(predictor_deltas)\n",
    "\n",
    "feature_deltas, predictor_deltas = pairwise_transform(normed_judgments)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ltr.plots import plot_pairwise_data\n",
    "\n",
    "# Filter down to a judgment list of our two fav queries \n",
    "# out of the normalized data\n",
    "just_these_queries = []\n",
    "for j in normed_judgments:\n",
    "    if j.qid == 0 or j.qid == 2 or j.qid == 1 or j.qid == 9:\n",
    "        just_these_queries.append(j)\n",
    "\n",
    "# Pairwise transform just these two, and plot\n",
    "features, predictors = pairwise_transform(just_these_queries)\n",
    "plot_pairwise_data(features, predictors,\n",
    "                   xlabel=\"name BM25 (Delta Std Devs)\",\n",
    "                   ylabel=\"short_description BM25 (Delta Std Devs)\",\n",
    "                   title=\"Pairwise Differences, Dryer, Blue Ray, Blu Ray, Nook\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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9+7diytXrmDYsGHaiFEt3333HUqWLInatWvj+++/x5s3b3KtHxAQACsrK+nh6uqaa30iIiIqvNQe42Nubo6///4bTZs2lSs/ffo02rZti4SEBI0GqI5FixahTp06sLW1xblz5zBlyhQMGjQIixYtynEbZS0+rq6uHONDRERUiGhtjE/JkiWVdmdZWVnBxsZG3d291+TJkzF//vxc6wQFBaFSpUoYN26cVFajRg0YGRlh2LBhCAgIkJt+n5WxsXGO64iIiKhoUbvF59dff8W2bduwYcMGaSxNeHg4/P394efnp/HurqioKDx//jzXOmXKlIGRkZFC+e3bt1GtWjXcvXsXFStWVOl4nNVFRERU+GitxWf58uV48OAB3Nzc4OaWcePE0NBQGBsbIyoqCitXrpTqBgYG5iF0efb29tINUtV17do1GBgYFJgZZ0RERKRbaic+nTt31kIYH+78+fO4ePEivL29YWlpifPnz2Ps2LHo16+fVrrgiIiIqPBRu6uroAoMDMSIESNw9+5dpKSkwNPTE/3798e4cePUGsPDri4iIqLCR2tdXQVVnTp1cOHCBV2HQURERAWYSomPra0t/v33X9jZ2cHGxkbp3dkzvXjxQmPBEREREWmSSonP4sWLpVs/LFmyRJvxEBEREWmNSomPv78/AODNmzeQyWTw8fGBo6OjVgMjIiIi0jS1bllRrFgxfP7550hOTtZWPERERERao/a9uurXr49//vlHG7EQERERaZXas7pGjBiB8ePH48mTJ6hbty7Mzc3l1teoUUNjwRFRPklNAOa5ZCxPfQYYmedeXx0RQcDyhu+ef3Yc+M1bO8ciInoPtROfXr16AQBGjx4tlclkMgghIJPJkJaWprnoiNQUFpOE4OgEeNqZw9nKVG7d9ccvcSnkBep72KKma9G/qGVu5yJ7vUdhz5GZmny6+hJWf+6NbVdCcfBWONpWc0L3em4qH3PH1Sd4GBWPDjWc0aqyk0KdFace4PO3y02+O4omldzQt5E7LoW8wNx9d6V6PeqUwoIeteS2PRoUjmN3I9GykoPSfRMRvY/aFzB89OhRruvd3d0/KCBd4wUMC68tl0MxZedNpAvAQAYE+FVHz48yvrDHb72GHYFPpbpd65TCwmxfqkVJbuciq+3n72LG/27DRKTgqslwAEDd5OVIRMZFP5NgAgBwszXFqa9a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MlJ8/PHHwsLCQm46+/nz50XNmjWFkZGRqFWrltixY4dKg5uznhNnZ2fRoUMHsXPnToW6YWFhYsCAAcLOzk4YGxuLMmXKiCFDhoiYmBi5evXr1xcAFM7rqFGjRNmyZYWxsbGwt7cX/fv3F9HR0dL6efPmCR8fnxxjJdImmRBC5HOuRUSkMeHh4ahatSoCAwPh7u6u63DoPVJTU1G+fHls2rQJTZo00XU4pIfY1UVEhZqTkxN+//33XGdQUcERGhqKqVOnMukhnWGLDxEREekNtvgQERGR3mDiQ0RERHqDiQ8RERHpDSY+REREpDeY+BAREZHeYOJDREREeoOJDxEREekNJj5ERESkN5j4EBERkd5g4kNERER6g4kPERER6Q0mPkRERKQ3mPgQERGR3mDiQ0RERHqDiQ8RERHpDSY+REREpDeY+BAREZHeYOJDREREeoOJDxEREekNJj5ERESkN5j4EBERkd5g4kNERER6g4kPERER6Q0mPkRERKQ3mPgQERGR3mDiQ0RERHqDiQ8RERHpDSY+REREpDeY+BAREZHeYOJDREREeoOJDxEREekNJj5ERESkN5j4EBERkd5g4kNERER6g4kPERER6Q0mPkRERKQ3mPgQERGR3mDiQ0RERHqDiQ8RERHpDSY+REREpDeY+BAREZHeYOJDREREeoOJDxEREekNJj5ERESkN5j4EBERkd5g4kNERER6g4kPERER6Q0mPkRERKQ3mPgQERGR3mDiQ0RERHqDiQ8RERHpDSY+REREpDeY+BAREZHeYOJDREREeoOJDxEREekNJj5ERESkN5j4EBERkd5g4kNERER6g4kPERER6Q0mPkRERKQ3mPgQERGR3mDiQ0RERHqDiQ8RERHpDSY+REREpDeY+BAREZHeYOJDREREeoOJDxEREekNJj5ERESkN5j4EBERkd5g4kNERER6g4kPERER6Q0mPkRERKQ3mPgQERGR3mDiQ0RERHqDiQ8RERHpDSY+REREpDeY+BAREZHeYOJDREREeoOJDxEREekNJj5ERESkN5j4EBERkd5g4kNERER6g4kPERER6Q0mPkRERKQ3mPgQERGR3mDiQ0RERHqjmK4DICpM0tLS8Pr1a12HQaS3ihcvDkNDQ12HQYUYEx8iFQghEB4ejlevXuk6FCK9Z21tDScnJ8hkMl2HQoUQEx8iFWQm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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_pairwise_data(feature_deltas, predictor_deltas,\n",
    "                   xlabel=\"name BM25 (Delta Std Devs)\",\n",
    "                   ylabel=\"short_description BM25 (Delta Std Devs)\",\n",
    "                   title=\"Pairwise Differences, Dryer, Blue Ray, Blu Ray, Nook\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train the model\n",
    "\n",
    "We train a linear SVM model here.\n",
    "\n",
    "### What you should play with\n",
    "\n",
    "* Play with the various [SVM hyperparameters](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html)\n",
    "* If you're feeling more advanced: is there a different kind of LTR model you could use?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LibLinear]"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[0.07895488, 0.06960982]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import svm\n",
    "model = svm.LinearSVC(max_iter=10000, verbose=1)\n",
    "model.fit(feature_deltas, predictor_deltas)\n",
    "model.coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Upload the model\n",
    "\n",
    "We upload the model to Solr, using the feature names from our featureset. Nothing to play with here. Of course, if you wanted to explore a non-linear model, you would want to explore the [options available in Solr LTR](https://solr.apache.org/guide/8_8/learning-to-rank.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PUT http://aips-solr:8983/solr/solr/products/schema/model-store\n",
      "{\n",
      "  \"store\": \"test\",\n",
      "  \"class\": \"org.apache.solr.ltr.model.LinearModel\",\n",
      "  \"name\": \"test_model\",\n",
      "  \"features\": [\n",
      "    {\n",
      "      \"name\": \"name_bm25\",\n",
      "      \"norm\": {\n",
      "        \"class\": \"org.apache.solr.ltr.norm.StandardNormalizer\",\n",
      "        \"params\": {\n",
      "          \"avg\": \"2.1163671514454276\",\n",
      "          \"std\": \"2.1343091696156313\"\n",
      "        }\n",
      "      }\n",
      "    },\n",
      "    {\n",
      "      \"name\": \"name_constant\",\n",
      "      \"norm\": {\n",
      "        \"class\": \"org.apache.solr.ltr.norm.StandardNormalizer\",\n",
      "        \"params\": {\n",
      "          \"avg\": \"0.6991150442477876\",\n",
      "          \"std\": \"0.45864277946371484\"\n",
      "        }\n",
      "      }\n",
      "    }\n",
      "  ],\n",
      "  \"params\": {\n",
      "    \"weights\": {\n",
      "      \"name_bm25\": 0.07895487537874991,\n",
      "      \"name_constant\": 0.06960982261218789\n",
      "    }\n",
      "  }\n",
      "}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "''"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import json\n",
    "\n",
    "linear_model = {\n",
    "  \"store\": \"test\",\n",
    "  \"class\": \"org.apache.solr.ltr.model.LinearModel\",\n",
    "  \"name\": \"test_model\",\n",
    "  \"features\": [\n",
    "  ],\n",
    "  \"params\": {\n",
    "      \"weights\": {\n",
    "      }\n",
    "  }\n",
    "}\n",
    "\n",
    "import math\n",
    "ftr_model = {}\n",
    "ftr_names = [ftr['name'] for ftr in feature_set]\n",
    "for idx, ftr_name in enumerate(ftr_names):\n",
    "    config = {\n",
    "        \"name\": ftr_name,\n",
    "        \"norm\": {\n",
    "            \"class\": \"org.apache.solr.ltr.norm.StandardNormalizer\",\n",
    "            \"params\": {\n",
    "                \"avg\": str(means[idx]),\n",
    "                \"std\": str(std_devs[idx])\n",
    "            }\n",
    "        }\n",
    "    }\n",
    "    linear_model['features'].append(config)\n",
    "    linear_model['params']['weights'][ftr_name] =  model.coef_[0][idx] \n",
    "\n",
    "print(f\"PUT {SOLR_URL}/solr/{products_collection}/schema/model-store\")\n",
    "print(json.dumps(linear_model, indent=2))\n",
    "\n",
    "# Delete old model\n",
    "resp = requests.delete(f\"{SOLR_URL}/solr/{products_collection}/schema/model-store/test_model\")\n",
    "\n",
    "\n",
    "# Upload the model\n",
    "resp = requests.put(f\"{SOLR_URL}/solr/{products_collection}/schema/model-store\", json=linear_model)\n",
    "resp.text"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Issue searches!\n",
    "\n",
    "Issue searches to see if you like the model\n",
    "\n",
    "### What you should play with\n",
    "\n",
    "Tune the search to see how deeply to do reranking via `reRankDocs`. Use a different baseline search by adding in [some edismax parameters](https://solr.apache.org/guide/8_8/the-extended-dismax-query-parser.html)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Figure 11.13"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div id=\"demo\">\n",
       "        <input style=\"width:50%\" readonly type=\"text\" name=\"q\" value=\"transformers dvd\">\n",
       "        <input readonly type=\"submit\" value=\"Search\">\n",
       "\n",
       "    <div class=\"results\">\n",
       "    \t\n",
       "\n",
       "    </div>\n",
       "</div>\n",
       "    \t<div style=\"position: relative; width: 100%; height:auto; overflow: auto;\">\n",
       "\t    \t<div style=\"position: relative; float:left; width: 120px; margin-top:25px\">\n",
       "\t    \t\t<img style=\"width:100px; height: auto; max-height:150px\" src=\"../data/retrotech/images/32429037763.jpg\">\n",
       "\t    \t</div>\n",
       "\t    \t<div style=\"position:relative; float:left; clear:none; width: 80%; height:auto\">\n",
       "\t    \t\t<p><strong>Name:</strong> Transformers - DVD | <strong>Manufacturer:</strong> \\N</p>\n",
       "\t    \t\t<p> \n",
       "\t    \t\t</p>\n",
       "\t    \t</div>\n",
       "    \t</div>\n",
       "    \t\n",
       "\t\t<div style=\"position:relative; clear:both; content: ' '; display: block; height: 1px; margin-top: 10px; margin-bottom:20px\">\n",
       "\t\t\t<hr style=\"color: gray; width: 95%;\" />\n",
       "\t\t</div>\n",
       "\t\t\n",
       "    \t<div style=\"position: relative; width: 100%; height:auto; overflow: auto;\">\n",
       "\t    \t<div style=\"position: relative; float:left; width: 120px; margin-top:25px\">\n",
       "\t    \t\t<img style=\"width:100px; height: auto; max-height:150px\" src=\"../data/retrotech/images/826663126044.jpg\">\n",
       "\t    \t</div>\n",
       "\t    \t<div style=\"position:relative; float:left; clear:none; width: 80%; height:auto\">\n",
       "\t    \t\t<p><strong>Name:</strong> Transformers Japanese Collection: Headmasters - DVD | <strong>Manufacturer:</strong> \\N</p>\n",
       "\t    \t\t<p> \n",
       "\t    \t\t</p>\n",
       "\t    \t</div>\n",
       "    \t</div>\n",
       "    \t\n",
       "\t\t<div style=\"position:relative; clear:both; content: ' '; display: block; height: 1px; margin-top: 10px; margin-bottom:20px\">\n",
       "\t\t\t<hr style=\"color: gray; width: 95%;\" />\n",
       "\t\t</div>\n",
       "\t\t\n",
       "    \t<div style=\"position: relative; width: 100%; height:auto; overflow: auto;\">\n",
       "\t    \t<div style=\"position: relative; float:left; width: 120px; margin-top:25px\">\n",
       "\t    \t\t<img style=\"width:100px; height: auto; max-height:150px\" src=\"../data/retrotech/images/97368920347.jpg\">\n",
       "\t    \t</div>\n",
       "\t    \t<div style=\"position:relative; float:left; clear:none; width: 80%; height:auto\">\n",
       "\t    \t\t<p><strong>Name:</strong> The Transformers: The Movie - DVD | <strong>Manufacturer:</strong> \\N</p>\n",
       "\t    \t\t<p> \n",
       "\t    \t\t</p>\n",
       "\t    \t</div>\n",
       "    \t</div>\n",
       "    \t\n",
       "\t\t<div style=\"position:relative; clear:both; content: ' '; display: block; height: 1px; margin-top: 10px; margin-bottom:20px\">\n",
       "\t\t\t<hr style=\"color: gray; width: 95%;\" />\n",
       "\t\t</div>\n",
       "\t\t\n",
       "    \t<div style=\"position: relative; width: 100%; height:auto; overflow: auto;\">\n",
       "\t    \t<div style=\"position: relative; float:left; width: 120px; margin-top:25px\">\n",
       "\t    \t\t<img style=\"width:100px; height: auto; max-height:150px\" src=\"../data/retrotech/images/708056579746.jpg\">\n",
       "\t    \t</div>\n",
       "\t    \t<div style=\"position:relative; float:left; clear:none; width: 80%; height:auto\">\n",
       "\t    \t\t<p><strong>Name:</strong> Nintendo - Transformers 3 Stylus 2-Pack | <strong>Manufacturer:</strong> Nintendo</p>\n",
       "\t    \t\t<p> \n",
       "\t    \t\t</p>\n",
       "\t    \t</div>\n",
       "    \t</div>\n",
       "    \t\n",
       "\t\t<div style=\"position:relative; clear:both; content: ' '; display: block; height: 1px; margin-top: 10px; margin-bottom:20px\">\n",
       "\t\t\t<hr style=\"color: gray; width: 95%;\" />\n",
       "\t\t</div>\n",
       "\t\t\n",
       "    \t<div style=\"position: relative; width: 100%; height:auto; overflow: auto;\">\n",
       "\t    \t<div style=\"position: relative; float:left; width: 120px; margin-top:25px\">\n",
       "\t    \t\t<img style=\"width:100px; height: auto; max-height:150px\" src=\"../data/retrotech/images/unavailable.jpg\">\n",
       "\t    \t</div>\n",
       "\t    \t<div style=\"position:relative; float:left; clear:none; width: 80%; height:auto\">\n",
       "\t    \t\t<p><strong>Name:</strong> Transformers: Season 2, Vol. 1 - DVD | <strong>Manufacturer:</strong> \\N</p>\n",
       "\t    \t\t<p> \n",
       "\t    \t\t</p>\n",
       "\t    \t</div>\n",
       "    \t</div>\n",
       "    \t\n",
       "\t\t<div style=\"position:relative; clear:both; content: ' '; display: block; height: 1px; margin-top: 10px; margin-bottom:20px\">\n",
       "\t\t\t<hr style=\"color: gray; width: 95%;\" />\n",
       "\t\t</div>\n",
       "\t\t"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from IPython.display import display,HTML\n",
    "from aips import render_search_results\n",
    "\n",
    "query = \"transformers dvd\"\n",
    "\n",
    "collection = \"products\"\n",
    "request = {\n",
    "    \"fields\": [\"upc\", \"name\", \"manufacturer\", \"score\"],\n",
    "    \"limit\": 5,\n",
    "    \"params\": {\n",
    "      \"q\": \"{!ltr reRankDocs=60000 reRankWeight=2.0 model=test_model efi.keywords=\\\"\" + query + \"\\\"}\",\n",
    "      \"qf\": \"name upc manufacturer short_description long_description\",\n",
    "      \"defType\": \"edismax\",\n",
    "      \"q\": query\n",
    "    }\n",
    "}\n",
    "\n",
    "search_results = requests.post(f\"{SOLR_URL}/{products_collection}/select\", json=request).json()\n",
    "display(HTML(render_search_results(query, search_results['response']['docs'])))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
